У меня возникла проблема при запуске free (position).
void printTree(nodeT node, int hieght)
{
int *position;
position = (int*)malloc(hieght * sizeof(int*));
for (int i = 0; i <= hieght; i++)
{
position[i] = 0;
}
BOOLEAN DONE = FALSE;
while (DONE == FALSE)
{
printMoveDown(&node, position);
printLEAFNode(&node, position);
DONE = printMoveUp(&node, position);
printSingleKey(&node, position);
}
free(position);
position = NULL;
}
Полное сообщение об ошибке, которое я получаю от VS2010, ОБНАРУЖЕНО КОРРУПЦИЕЙ КАРТЫ: после нормального блока (# 64) в 0x00031390.CRT обнаружил, что приложение записало в память после завершения кучи.
Отладчик сообщает, что проблема возникает в то время как в: dbgheap.c
extern "C" void __cdecl _free_dbg_nolock
line 1376: if (!CheckBytes(pbData(pHead) + pHead->nDataSize, _bNoMansLandFill, nNoMansLandSize))
if (pHead->szFileName) {..}
else { this is where the program stops }
Я попытался настроить ту же ситуацию с меньшими затратамичто происходит, чтобы увидеть, смогу ли я сузить проблему.
void function (int y)
{
int *x;
x = (int*)malloc(y * sizeof(int*));
free(x);
x = NULL;
}
Это то же самое, что и выше, без цикла for и while.Это работает.Удаление цикла for - вот что заставило его работать.Я не знаю почему.Я посмотрел, что такое ЭЛТ, но для меня это были довольно новые концепции, и я предполагаю, что могу решить эту проблему, не зная об этих ЭЛТ.
Цикл for присваивает значения памяти, выделенной для позиции, кроме того, я не могу понять, почему это вызывает проблему ... на самом деле, теперь, когда я об этом думаю.Я изменил цикл на высоту + 1, что решило проблему.