每当我运行注释代码时,程序就会崩溃
Program crashes whenever i run the commented code
每当我运行程序崩溃的构造函数的评论部分时。当我编译时,它也不会丢任何错误。有人可以告诉我发生了什么事吗?
我也试图在此处实施自动售货机问题。我删除了正常工作的某些部分。
#include <iostream>
using namespace std;
class money
{
public :
int *max;
int *accepted_values = new int[10];
bool present;
int *deposited;
int i;
money()
{
}
money(int *a, int how_many)
{
//*max = how_many;
// for (i=0; i<how_many; i++)
// {
// accepted_values[i] = a[i];
// }
//*deposited = 0;
present = false;
}
};
class Vending_machine
{
public :
money *coins = new money(accepted_coins, 5);
//money *coins = new money();
int *amount_deposited = new int;
Vending_machine()
{
cout<<"Cool";
}
~Vending_machine()
{
delete amount_deposited;
}
};
int main()
{
Vending_machine a;
}
您在构造函数中删除int pointer int *max
和 int *deposited
,而无需先分配正确的内存地址。
这将永远崩溃,因为它是未定义的行为。
int* myPointer;
*myPointer = 10; // crashes
在您使用它之前,指针必须首先指向有效的地址。这可能是另一个变量的地址:
int myInt;
int *myPointer = &myInt;
*myPointer = 10; // doesn't crash - myInt now is 10.
或可以动态分配和释放。
int* myPointer = new int;
但是,在这种情况下,您必须注意一旦完成后,就会发布内存。
delete myPointer;
一个更好的解决方案是使用std::unique_ptr<>
,它可以释放其针对破坏的指针。
,最好的解决方案是根本不使用指针,如果它们不是真正的必要条件 - 尤其是如果您不知道非常完全指针的工作方式。我认为在您的示例中,您可以完全避免指针。
相关文章:
- 程序崩溃并显示"std::out_of_range"错误
- 试图创建流或fopen时程序崩溃
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 如何找出应用程序崩溃的原因 - Win 10 LTSB
- 操纵安卓相机的深度图导致应用程序崩溃
- 为什么当我尝试搜索双链表中第一个数据条目之外的数据时,程序崩溃了?
- DLL Made with CMake 使程序崩溃
- 程序崩溃使用boost::asio
- 调用 free() 有时会导致程序崩溃
- 邮件加密程序崩溃
- 调用 java 的回调() 时应用程序崩溃.由于 detatchThread 而获得运行时错误
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- For 循环在尝试读取数组 c++ 时程序崩溃
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 无法访问的代码如何导致我的程序崩溃?
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- QCompleter set模型使应用程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 删除SDL_PollEvent时程序崩溃