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

Program crashes whenever i run the commented code

本文关键字:程序 崩溃 代码 运行 注释      更新时间:2023-10-16

每当我运行程序崩溃的构造函数的评论部分时。当我编译时,它也不会丢任何错误。有人可以告诉我发生了什么事吗?

我也试图在此处实施自动售货机问题。我删除了正常工作的某些部分。

#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 *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<>,它可以释放其针对破坏的指针。

,最好的解决方案是根本不使用指针,如果它们不是真正的必要条件 - 尤其是如果您不知道非常完全指针的工作方式。我认为在您的示例中,您可以完全避免指针。