2017년 5월 20일 토요일

VS 2015 heap corruption 에러

(1) new로 할당한 경우

char * a = new char[10]; 이라고 선언하고
a[10]이나 a[11]과 같이 원래 할당한 공간의 영역인 10보다 더 큰 영역에 접근하려고 하면 이와 같은 에러가 난다.


(2) malloc으로 할당한 경우

Test * test = (Test*)malloc(sizeof(Test*)); 
free(test);

이와 같이 메모리를 할당하고 해제했을 때 오류가 나는 경우이다.

실제로 위의 코드를 실행해보면 오류가 나지는 않지만
만약 malloc/free 부분에서 Heap 에러가 난다면 한번쯤 훑어봐야 하는 부분이다.

이 부분의 에러는 sizeof(Test)가 sizeof(Test*)보다 크기 때문에 일어나는 오류이다.

즉, 실제로 할당된 메모리의 크기는 sizeof(Test*)이지만
해제하려고 하는 메모리의 크기는 sizeof(Test)이기 때문에 Heap 에러가 나는 것이다.

그러므로 sizeof(Test*)를 sizeof(Test)로 바꾸면 해결 될 것이다.

댓글 없음:

댓글 쓰기