따..딱히 공부하려고 포스팅하는 건 아니니까..!
HEAP CORRUPTION DETECTED 오류와 해결방법 본문
HEAP CORRUPTION DETECTED 에러의 원인은
malloc이나 new로 할당한 메모리의 영역보다 더 큰 영역에 접근하고자 했기 때문이다.
어떤 경우가 있는지 예를 들자면,
(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)로 바꾸면 해결 될 것이다.
'C/C++' 카테고리의 다른 글
C++ 한글 문자열(유니코드) (0) | 2015.10.04 |
---|---|
C++은 객체지향 언어인가, 아닌가 (0) | 2015.06.22 |
추상화(Abstraction) (0) | 2015.02.05 |
컴파일과 링크 (0) | 2014.12.30 |
#define보다 const가 더 유용한 이유 (0) | 2014.12.09 |
Comments