HEAP CORRUPTION DETECTED:私有阵列

时间:2015-12-26 22:12:10

标签: c++ arrays destructor heap-corruption

所以我不得不用一个Point类创建一个程序,它需要多少维度然后我在类中做了一个带有如此多坐标的funktion,并且这样做我必须创建一个动态数组,因为尺寸不固定。

class Punkt
{
private:
    char n;
    int d;
    double* k = new double[d];
public:
    Punkt(int);
    void Name(char);
    void Initialisieren();
    ~Punkt();
};

这是定义这些功能的地方:

Punkt::Punkt(int dimension)
{
    d = dimension;
}

void Punkt::Name(char name)
{
    n = name;
}

void Punkt::Initialisieren()
{
    for (int i = 0; i < d; i++) {
        cout << "Geben sie bitte die " << i + 1 << ". Koordinate von " << n << " ein: ";
        cin >> k[i];
        cout << endl;
    }
}

Punkt::~Punkt()
{
    cout << "Destrukt: " << n << endl;
    delete[] k;
}

启动程序时,我收到了Destrukt: B的消息,但Destrukt: A丢失了(我首先声明A然后是B)然后它给了我错误。它也没有做任何我告诉它与我做的其他功能但没有列出它们的couts。有人可以帮帮我吗?我知道它已被问过这么多次,但大多数人都有问题bcs制作了一系列字符而忘记了最后一个包含零的地方。

P.S。该程序是用德语编写的,如果应该更改,请告诉我,因为我是本节的新手。

1 个答案:

答案 0 :(得分:5)

请注意,您在类定义中包含以下内容:

int d;
double* k = new double[d];

这将在构造函数运行到大小为d的新数组之前初始化k。问题是d尚未被初始化,因为构造函数尚未运行。要解决此问题,请将初始化移动到构造函数中。

您还需要一个复制构造函数和赋值运算符,以及可选的移动构造函数和移动赋值运算符。如果您还没有听说过这些条款,请在线快速进行Google搜索。