每当我运行注释代码时程序崩溃

时间:2017-12-03 09:34:14

标签: c++

每当我运行构造函数的注释部分时,程序就会崩溃。 当我编译它时,它也不会抛出任何错误。 有人能告诉我发生了什么吗?

我也试图在这里实现自动售货机问题。 我删除了一些正常工作的代码部分。

#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;
}

1 个答案:

答案 0 :(得分:0)

您正在构造函数中取消引用int指针int *maxint *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<>,它负责在销毁时释放其指针。

但最好的解决方案是不要使用指针,如果它们不是真的必要 - 特别是如果你不完全知道非常指针的工作方式。我假设在你的例子中你可以完全避免指针。