얼마전 생성한 배열 이상의 데이타를 입력하는 버그 때문에 힙이 손상되어 프로그램이 비 정상 종료 되었던 적이 있다.
이런 경우 상당히 당혹 스럽다 어느 부분에서 힙이 손상 되었는지 찾기 힘들기 때문인데 ~
결론 2시간에 걸치 노가다를 통한 디버그로 오류를 찾아 냈다.
문제가 예상 되는 부분마다 _heapchk() 함수를 사용 해서 다음과 같이 처리 했다.
INT* memory = new INT(2); if(_heapchk() != _HEAPOK) DebugBreak(); for(int i = 0 ; i < 10 ; ++i) //memory overflow (힙 손상) memory[i] = 1; if(_heapchk() != _HEAPOK) //힙이 손상 됨을 감지고 하고 해당 위치로 이동 DebugBreak(); INT* memory1 = new INT(2); //힙 손상으로 crash 된다.
항상 찾기 어려운 버그는 쉽게 만들어 진다 ㅡㅡ
'programming' 카테고리의 다른 글
nonlocal goto 문 (0) | 2017.04.07 |
---|---|
C++ 개발자를 위한 C# 키워드 정리 (0) | 2015.03.20 |
GetLastError 함수 코드와 한글 메시지 (0) | 2013.08.26 |
ODBC 관리자는 32bit 64bit 호환 되지 않는다 (2) | 2012.09.14 |
stack overflow 되면 mini dump 0kb 인 문제 해결 방법 (0) | 2012.04.16 |