Когда delete
выполняет программу, происходит сбой.Я попробовал следующий код для проверки поврежденного блока кучи, но if
условие приводит к ложному.
int rc;
if (_HEAPOK != (rc = _heapchk()))
{
switch(rc)
{
case _HEAPEMPTY:
puts("The heap has not been initialized.");
break;
case _HEAPBADNODE:
puts("A memory node is corrupted or the heap is damaged.");
break;
case _HEAPBADBEGIN:
puts("The heap specified is not valid.");
break;
}
}
полный код можно найти здесь: http://cyberkinetica.homeunix.net/os2tk45/xpg4ref/157_L2__heapchkValidateDefa.html
Пожалуйста, дайте мне знать, как отлаживатьв этом случае.
РЕДАКТИРОВАТЬ:
Я попытался отладить в файле:
...\Microsoft Visual Studio 9.0\VC\crt\src\dbgheap.c
, и он не работает в следующей функции:
extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData)
Комментарии к этой функции:
Цель: Проверить, что указатель является не только действительным, но и указанным«местная» куча.Указатели из другой копии среды выполнения C (даже в том же процессе) будут перехвачены.
что это за локальная куча и помогает ли это выяснить проблему?