DAMAGE: after Normal block (#XXX) at 0xXXXXXXXX

위와 같은 "Microsoft Visual C++ Debug Library" Error가 발생할 때가 있다.
이때 XXX 부분들(파랑)은 각기 다르게 나타날수가 있다.
이는 대부분이 잘못된 메모리 영역의 참조에 의해 발생한다.
아래의 예를 보자.


영역 참조의 잘못된 예 (Language : c)
  1. int *a;
  2. int b=20 , i;
  3. a = new int[b];
  4. for(i=0;i<b+1;i++) // 사실 이부분이 잘못 됬는데
  5. {
  6.     a[i] = i;
  7. }
  8. delete [] a; // 엉뚱한 이곳에서 오류가 나타남 이걸 지우면 오류 안뜸


b+1이부분은 고의적으로 만들었지만 실수로 이럴수 있기 때문에..
원인은 할당 영역을 벗어난 곳에 손을 대면 이런거라는걸 알 수 있다.

즉 a배열은 20까지밖에 없는데 21번 index까지 작업하기 때문에 오류가 있다.
이때 delete를 하게 되면 위와 같은 오류가 발생이 가능하다.

해제하려는 메모리가 정확하게 잘 참조하였는지 확인하자.

본 자료는 다음을 참고하였다.

참고 : http://blog.naver.com/yjh1990/130000599620

+ Recent posts