i’m working in VC++, but this is a basic C++ question … I am quite new with C++, never had to worry about deleting in Java … Anyway, after some research, I believe I have found the right way to do a detele, but does not work … I am using some temporary 2D arrays in a function, and before ending the function, I need to delete them. Here is the code:
int** a;
a = new int*[b/2];
for(int i = 0; i < (b/2); i++)
{
a[i] = new int[b];
}
// some code here. Not changing the b variable!
for(int i = 0; i < (b/2); i++)
{
// error happens here
delete[] a[i];
}
delete[] a;
After running the programm, I get a “HEAP CORRUPTION DETECTED” error – pasting the printscreen:

Any idea where could the problem be?
Thank you.
UPDATE
I am posting the debugger screenshot, happeng just before I get the error. (the variable a’s real name is “vkljucenost”:

UPDATE
Since some asked me to post more code, I am posting the whole function code:
int** CVaja3KruskalView::CalcKruskal(EnosSez* seznam, int dimenzijaMatr)
{
int** rezultat; // results array
int stRezultatov = 0; // number of connections
rezultat = new int*[dimenzijaMatr-1];
for(int i = 0; i < (dimenzijaMatr-1); i++)
{
rezultat[i] = new int[2]; // shranjujem p in q
rezultat[i][0] = -1;
rezultat[i][1] = -1;
}
int** vkljucenost;
int* dolzVkljuc = new int[dimenzijaMatr/2]; // last list elements
vkljucenost = new int*[dimenzijaMatr/2];
for(int i = 0; i < (dimenzijaMatr/2); i++)
{
vkljucenost[i] = new int[dimenzijaMatr];
dolzVkljuc[i] = -1; // the i-list is empty
}
EnosSez* tmp = seznam;
int pVkljuc;
int qVkljuc;
while(tmp!=NULL)
{
pVkljuc=Vkljuceno(vkljucenost, dolzVkljuc, tmp->p, dimenzijaMatr);
qVkljuc=Vkljuceno(vkljucenost, dolzVkljuc, tmp->q, dimenzijaMatr);
if(pVkljuc==qVkljuc && pVkljuc != -1)
{} else if (pVkljuc!=qVkljuc && pVkljuc != -1 && qVkljuc != -1)
rezultat[stRezultatov][0] = tmp->p;
rezultat[stRezultatov][1] = tmp->q;
stRezultatov++;
int prvi = min(pVkljuc,qVkljuc);
int drugi = max(pVkljuc,qVkljuc);
// prestavimo drugi seznam v prvega (seznama združimo)
for(int i = 0; i <= dolzVkljuc[drugi]; i++)
{
vkljucenost[prvi][dolzVkljuc[prvi]] = vkljucenost[drugi][i];
dolzVkljuc[prvi]++;
}
dolzVkljuc[drugi] = -1; // spraznemo drugi seznam
} else if((pVkljuc != -1 && qVkljuc == -1) || (pVkljuc == -1 && qVkljuc != -1))
{
rezultat[stRezultatov][0] = tmp->p;
rezultat[stRezultatov][1] = tmp->q;
stRezultatov++;
if(pVkljuc == -1)
{
vkljucenost[qVkljuc][dolzVkljuc[qVkljuc]] = tmp->p;
dolzVkljuc[qVkljuc]++;
} else
{
vkljucenost[pVkljuc][dolzVkljuc[pVkljuc]] = tmp->q;
dolzVkljuc[pVkljuc]++;
}
} else
{
rezultat[stRezultatov][0] = tmp->p;
rezultat[stRezultatov][1] = tmp->q;
stRezultatov++;
int prviPrazen = 0;
while(dolzVkljuc[prviPrazen] > -1)
{
prviPrazen++;
}
dolzVkljuc[prviPrazen] = 2;
vkljucenost[prviPrazen][0]=tmp->p;
vkljucenost[prviPrazen][1]=tmp->q;
}
tmp=tmp->next;
}
//destruction
delete[] dolzVkljuc;
for(int i = 0; i < (dimenzijaMatr/2); i++)
{
// error happening here!!!
delete[] vkljucenost[i];
}
delete[] vkljucenost;
return rezultat;
}
As suggested in the comments, the problem was in other code, notwith deleting the nodes. I did not debug the code, but, as the commenters suggested, used std::vector instead of array – first checking that the use of vector has in fact the same efficiency as using arrays.