gpt4 book ai didi

c++ - 在类中的几个数组上调用delete []时获取 “heap corruption detected”-C++

转载 作者:行者123 更新时间:2023-12-02 09:55:57 24 4
gpt4 key购买 nike

我有以下代码,其中我在类的构造函数中为三个int *分配内存。然后在类的析构函数中将其删除。我在删除析构函数中的两个int *时遇到问题(我将注释放在下面的代码中,出现了问题):

#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;
}

我已多次调试代码,但是,我不确定为什么在delete [] a2和delete [] a3时为什么会得到HEAP CORRUPTION。执行delete [] a1可以正常工作。我在delete [] a2和delete [] a3上遇到以下错误:

heap corruption detected

您知道我为什么会收到此错误,以及是由什么引起的(我很困惑,为什么删除a1可以正常工作,但是删除a2和a3却给出了此错误-尽管它们几乎通过相同的代码逻辑)?

最佳答案

您所有的数组的长度均为CAP,即3(根据if语句判断),但是在写入数组时不会相对于索引。

    else if (index >4 && index<=7)
{
index++;
a3[index] = data;
}

在这些行中,您可能要在数组中写入一个最大 8的索引。
这就是为什么出现错误的原因:

CRT detected that the application wrote to memory after end of heap buffer.



使用 index % CAP写入索引时,可以通过使用模运算符来解决此问题。
为了使它与任何 CAP一起正常工作,您的if语句还应该使用 >= N * CAP作为边界。

   else if (index >= 2 * CAP) // no upper check needed in an if-else chain
{
a3[index++ % CAP] = data; // you can also do index++ after
}

关于c++ - 在类中的几个数组上调用delete []时获取 “heap corruption detected”-C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60107382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com