HEAP CORRUPTION DETECTED error

반응형
출처 : http://javawork.egloos.com/2244196
보통 아래와 같은 코드에서 HEAP CORRUPTION DETECTED 에러가 납니다.

struct TestStruct
{
    int serial;
    short level;
    double postion;
};
typedef std::vector<TestStruct> TestVector;
TestVector test_vec;
TestStruct tt;
test_vec.push_back(tt);
memset(&test_vec[0], 0, sizeof(TestVector));

자기가 소유하지 않은 메모리, 즉 배열의 경계를 넘어서 초기화한다거나 하면 나중에 해당 객체가 해제될때 이 에러가 발생하는데, 최근에 특이한 환경에서 이 에러를 경험했습니다.

TestClass* p = new TestClass();
...
delete p;

이렇게만 해도 HEAP CORRUPTION DETECTED 에러가 발생했습니다. TestClass는 라이브러리에 정의된 클래스라는 것 말고는 특이할게 전혀 없는 클래스였습니다.

문제는 라이브러리와 어플리케이션의 프로젝트 설정의 차이점 때문이었습니다.

라이브러리의 프로젝트 세팅

어플리케이션의 프로젝트 세팅
이렇게 구조체 멤버 맞춤이 다르면 delete 할 때 에러가 발생하더군요. 설정에 따라 구조체의 길이를 다르게 인식하기 때문에 발생하는 문제인것 같습니다. 이런류의 문제는 링크 에러를 내는 것도 아니고 컴파일 에러를 내는 것도 아니라 찾기가 어렵습니다
TAGS.

Comments