У меня есть следующий код, где я выделяю память для трех 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;
}
Я много раз отлаживал код, но я не уверен, почему я получаю HEAP CORRUPTION, когда я удаляю [] a2 и когда я удаляю [] a3. Выполнение delete [] a1 работает просто отлично. Я получаю следующую ошибку при удалении [] a2 и delete [] a3:
![heap corruption detected](https://i.stack.imgur.com/JO71p.png)
Знаете ли вы, почему я получаю эту ошибку, и что вызывает это (я запутался, почему удаление a1 работает нормально, но удаление a2 и a3 вызывает эту ошибку - хотя они go почти через один и тот же лог c в коде)?