我的节目正在停止

时间:2017-02-03 10:58:31

标签: c++

这是我的班级,我的问题是当我调用构造函数

  

Eveniment e1(1,m1);

在main方法中使用参数,我的程序正在停止,我不知道为什么。 M1是IntrareCAlendar的对象。

class Eveniment{
private:
    const int id;
    IntrareCalendar data;
    char* detalii;
    int static nrIntrari;

public:
    Eveniment(int nr,IntrareCalendar ic) :id(nr){
        this->data = ic;
        nrIntrari++;
    }

    ~Eveniment(){
        if (this->detalii != NULL)
            delete[]this->detalii;

    }
};

我该怎么办?非常感谢!

1 个答案:

答案 0 :(得分:5)

您永远不会将detalii设置为有效的任何内容。它仍然未初始化 - 自动初始化为特定值。您可以在构造函数中将其设置为nullptr。 (不要在C ++中使用NULL。)

您的析构函数在该成员上调用delete[],但在此之前没有调用new[]。因此,程序的行为未定义。

另外,如果多个线程实例化static std::atomic<int>,请考虑使用nrIntarari作为Eveniment的类型。