해결된 질문
작성
·
186
0
예시를 똑같이 작성하고 실습하였는데 아무리 시도를 해도 HEAP CORRUPTION DETECTED라는 내용은 안 나오고 중단점 명령 실행됨(중단점 명령이 ....exe에서 실행되었습니다)이라고만 나오는데
이 2개가 동일한 의미인가요?
답변 1
1
우선 1 번 작성하셨으면 그냥 놔두시면 제가 시간 될 때 답변 드립니다.
질문주신 부분은 힙 할당 관련 내용인데
heap corruption은 애당초 추적을 하는 것이 100%가 아닙니다.
디버깅 모드라면 특정 값 (ex. 0xCC)를 이용해 지뢰밭을 설치해서
해당 부분이 수정 되었는지로 판별하지만,
애당초 이건 정확하지도 않고 디버그 모드에서만 작동하는 것이라 신뢰할 수 없습니다.
즉 터지지 않아도 문제가 없는게 아니라는겁니다.
그리고 할당하는 크기에 따라 메모리 할당 위치 및 다른 메모리 할당이 근처에 있는지 등
여러가지가 달라지기 때문에 딱히 왜? 라고 대답하기 힘듭니다.
1가지 더 궁금한 것이 있습니다
void* pointer = malloc();에서 malloc에
4를 입력하면 언급했던 내용이 나오고
12를 입력하면 정상적으로 종료되지만
8을 입력하면 이 경우에도 유효한 heap 범위를 초과하게 될 텐데 언급했던 내용이 나오지도 않고 정상적으로 종료되지도 않은 채 가만히 멈춰있는 것 같습니다(진단 세션 시간은 계속 증가)
이유가 무엇일까요?