所以我必须用一个 Point 类来编写一个程序,它需要有多少个维度,然后我在该类中创建了一个需要如此多坐标的函数,为此,我必须创建一个动态数组,因为大小不固定。
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),然后它给了我错误。它也不会执行我告诉它与我所做的一些其他功能相关的任何操作,但没有将它们列出来。有人可以帮帮我吗?我知道这个问题已经被问过很多次了,但大多数人都遇到了问题,因为他们制作了一个字符数组,却忘记了最后一个包含零的位置。
附注该程序是用德语编写的,如果需要更改,请告诉我,因为我是这部分的新手。
最佳答案
请注意,类定义中有以下内容:
int d;
double* k = new double[d];
这将在构造函数运行到大小为 d 的新数组之前初始化 k。问题是此时 d 尚未初始化,因为构造函数尚未运行。要解决此问题,请将初始化移至构造函数中。
您还需要一个复制构造函数和赋值运算符,以及可选的移动构造函数和移动赋值运算符。如果您还没有听说过这些术语,请在线快速进行 Google 搜索。
关于c++ - 检测到堆损坏 : private array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34475715/