Hello,
I am having trouble determining why this C++ code breaks when using dynamic arrays with new / delete (C++ style), and why it does not break with malloc / free (C style).
Specifically, when using Visual Studio 2003 and the new / delete commands, I am getting the error "Debug Error: ... DAMAGE: after Normal block (#146) at 0x00375FE8."
I've attached the relevant code, including the recursive function TraverseBetas.
//Code continues..........
//double *lvec;
//lvec = new double(numrows);
//double *uvec;
//uvec = new double(numrows);
double *lvec;
lvec = (double*) malloc (numrows * sizeof(double));
double *uvec;
uvec = (double*) malloc (numrows * sizeof(double));
for (int i = 0; i < numrows; i++)
{
*(lvec + i) = i;
*(uvec + i) = *(maxrhs + i) - 1;
}
TraverseBetas(numrows, lvec, uvec, 0, &temp);
//delete [] lvec;
//lvec = NULL;
//delete [] uvec;
//uvec = NULL;
free(lvec);
free(uvec);
//Code continues..........
void TraverseBetas(int numrows, double *lvec, double *uvec, int recurselevel, rhsstruct ***current)
{
int i;
int lowermark = (int) lvec[recurselevel];
int uppermark = (int) uvec[recurselevel];
if (recurselevel == numrows - 1)
{
for (i = lowermark; i <= uppermark; i++)
{
cout << endl << "Testing... current value is: " << (*current)[i]->lbval;
}
}
else
{
for (i = lowermark; i <= uppermark; i++)
{
TraverseBetas(numrows, lvec, uvec, (recurselevel + 1), (rhsstruct ***) (*current + i));
}
}
}
What I can't understand is why it works when I use the following malloc & free commands, but not with (the currently commented out) new & delete commands. It breaks on this line: delete [] lvec;
and ends up in dbgheap.c. Can anyone point me in the right direction?
Thanks!