У меня возникла проблема при запуске бесплатной (позиции).Использование malloc и бесплатно в C/C++ и получение ошибки HEAP CORRUPTION DETECTED
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 - вот что заставило его работать. Я не знаю почему. Я посмотрел, что такое CRT, но для меня это были все новые концепции, и я предполагаю, что могу решить эту проблему, не зная об этих ЭЛТ.
Цикл for присваивает значения памяти, выделенной для позиции, за исключением того, что я не могу придумать, почему это вызывает проблему ... Фактически сейчас, когда я думаю об этом. Я изменил цикл на высоту + 1, который исправил проблему.
Спасибо, используя calloc, сделали вещи проще. Я стараюсь избегать использования <= in циклов для обеспечения согласованности. Я считаю, что я изменил его из-за проблем, которые у меня были, и пробовал. – MykC 2010-11-26 20:23:18
Действительно, ваш ответ должен удалить уродливое и потенциально опасное действие из кода OP. – 2010-11-26 20:23:34