检测到堆损坏:私有数组

HEAP CORRUPTION DETECTED: private array

所以我不得不编写一个带有 class 点的程序,它需要多少维度,然后我在 class 中创建了一个需要这么多坐标的函数,然后做所以我不得不制作一个动态数组,因为大小不固定。

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),然后它给我错误。它也没有执行任何我告诉它与我已经创建但没有列出它们的其他功能有关的操作。有人可以帮帮我吗?我知道它已经被问过很多次了,但大多数人都遇到了问题,因为他们制作了一个字符数组,忘记了最后一个包含零的地方。

P.S。该程序是用德语编写的,如果需要更改请告诉我,因为我是这部分的新手。

请注意,您在 class 定义中有以下内容:

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

这将在构造函数 运行s 之前将 k 初始化为大小为 d 的新数组。问题是此时 d 还没有被初始化,因为构造函数还没有 运行。要解决此问题,请将初始化移至构造函数中。

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