HEAP CORRUPTION DETECTED

컴퓨팅/프로그래밍 2008/07/23 10:58
HEAP CORRUPTION DETECTED!!

dbgheap.c 파일안에 다음과 같은 상수들이 선언되어있다

static unsigned char _bNoMansLandFill = 0xFD;   /* 메모리 상태 채크를 위해
                                                   쓰이는 값*/
static unsigned char _bDeadLandFill   = 0xDD;   /* 삭제된 메모리에 쓰이는 값 */
static unsigned char _bCleanLandFill  = 0xCD;   /* 새로 할당된 메모리에 쓰이는 값 */
static unsigned char _bAlignLandFill  = 0xBD;   /* fill no-man's land for
                                                   aligned routines */

힙에 메모리 할당시 디버그 모드에서는
_CrtMemBlockHeader 구조체 + _bNoMansLandFill(2바이트) + 실제 메모리( _bCleanLandFill 로 채워짐 ) + _bNoMansLandFill(2바이트) 로 구성되며
릴리즈모드에서는 널영역(2바이트) + _CrtMemBlockHeader 의 일부분 + 실제 메모리 (쓰레기 값) + 널영역(2바이트) 로 구성되며 _bNoMansLandFill 는 포함되지 않는다

디버그 모드에서 메모리 삭제시 _bNoMansLandFill 의 메모리 영역을 검사하게 되는데
여기 다른 메모리가 침범해 있을때 발생하는 에러가 바로 힙 커럽션이다
문제는 이 에러의 원인이되는 메모리침범이 당시에는 나오지 않고 delete 할때
나온다는거다

잘하자

참고 링크
http://www.docsultant.com/site2/articles/debug_codes.html
http://www.codeguru.com/Cpp/W-P/win32/tutorials/article.php/c9535
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/_core_Memory_Management_and_the_Debug_Heap.asp

크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0
◀ PREV : [1] : ... [3] : [4] : [5] : [6] : [7] : [8] : [9] : [10] : [11] : ... [41] : NEXT ▶