【发布时间】:2020-02-07 05:06:01
【问题描述】:
我有以下代码,我在类的构造函数中为三个 int* 分配内存。稍后在类的析构函数中删除它。我在析构函数中删除两个 int* 时遇到问题(我已将 cmets 放在下面的代码中,我遇到了问题):
#define CAP 3
class SetOfStacks
{
private:
int* a1;
int* a2;
int* a3;
int index = -1;
public:
void push(int data);
SetOfStacks()
{
a1 = new int[CAP];
a2 = new int[CAP];
a3 = new int[CAP];
}
~SetOfStacks()
{
delete [] a1; //This works just fine
delete [] a2; //heap corruption here
delete [] a3; //heap corruption here
}
};
void SetOfStacks::push(int data)
{
if (index >= 3 * CAP)
{
cout << "stack overflow" << endl;
return;
}
if(index>=-1 && index<=1)
{
index++;
a1[index] = data;
}
else if (index >1 && index<=4)
{
index++;
a2[index] = data;
}
else if (index >4 && index<=7)
{
index++;
a3[index] = data;
}
}
int main()
{
SetOfStacks s;
s.push(10);
s.push(20);
s.push(30);;
s.push(40);
s.push(50);
s.push(60);
s.push(70);
s.push(80);
s.push(90);
return 0;
}
我多次调试代码,但是,我不确定为什么在删除 [] a2 和删除 [] a3 时会出现 HEAP CORRUPTION。执行 delete[] a1 工作得很好。我在 delete[] a2 和 delete[] a3 上收到以下错误:
您知道我为什么会收到此错误,以及是什么原因造成的(我很困惑为什么删除 a1 可以正常工作,但删除 a2 和 a3 会出现此错误 - 尽管它们在代码中几乎经历了相同的逻辑)?
【问题讨论】:
-
if (index >4 && index<=7)...a3[index] = data;- 这是你的问题。您在a3范围之外写入数据(a2也是如此)。 -
做
a2[index % 3]和a3[index % 3]来修复它...它将保持index在0-2以内
标签: c++ arrays delete-operator