programming2014. 1. 28. 13:45

얼마전 생성한 배열 이상의 데이타를 입력하는 버그 때문에 힙이 손상되어 프로그램이 비 정상 종료 되었던 적이 있다.

이런 경우 상당히 당혹 스럽다 어느 부분에서 힙이 손상 되었는지 찾기 힘들기 때문인데 ~

결론 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 된다.

 

항상 찾기 어려운 버그는 쉽게 만들어 진다 ㅡㅡ

Posted by 상현달