2011-12-02 1 views
0

나는 그 dll을 사용하는 dll과 exe 내부에있는 클래스를 가지고있다. Exe는 dll 내에 클래스를 만들고 메서드를 호출합니다. 릴리스 모드로 컴파일하면 모든 것이 잘 작동합니다. 디버그 DLL에서 C++ 메모리 할당 후 크래시

Debug Assertion Failed! _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 

포함 된 바이너리의 모든

런타임 DLL을의 동일한 버전을 사용하는 모든 것이 컴파일 : 나는 MDD 플래그 디버그 모드에서 (내 클래스가 사용하는 OpenCV의 라이브러리를 포함하여) 모든 컴파일한다면 그때 얻을 내가 이해할 수있는 한 (내 디버깅을 기반으로) 문제는 다음과 같습니다 :

exe ​​(main 아래)에 "new"연산자를 사용하여 클래스의 인스턴스를 만들고 있습니다. 내 클래스의 생성자가 메모리 할당이 필요한 작업을 수행하자마자 dll과 exe가 같은 메모리 공간을 사용하지만 다른 "다음 사용 가능 positio"를 사용하는 것처럼 클래스 자체의 메모리 위치를 덮어 씁니다 n "오프셋을 할당합니다. 그러므로 dll은 이미 exe의 내부에서 할당이 이루어져서 클래스가 상주하는 메모리 영역을 덮어 쓰는 것을 볼 수 없습니다. 분명히 이것은 메모리 문제를 야기합니다.

왜 이런 일이 발생할 수 있습니까? 상황을 설명하기 위해 최선을 다했지만 필요한 경우 더 많은 정보를 제공 할 수 있습니다.

미리 감사드립니다.

+0

은 메모리 누수처럼 보입니다. 힙에 뭔가를 덮어 썼습니다. –

+0

나는 그렇게 생각하지 않는다. 내 응용 프로그램에서 오랫동안 그 클래스를 사용 해왔고 항상 문제없이 디버깅 할 수있었습니다. 문제는 DLL을 .dll로 내 보낸 다음 해당 .dll을 사용하여 응용 프로그램을 디버깅하려고 할 때만 발생하기 때문에 .dll로 무언가를해야합니다. – sct

답변

0

문제점은 실수로 클래스의 헤더 파일에서 누락 된 2 개의 공개 멤버 변수라는 것을 알게되었습니다. 내가 그들을 추가하면 문제가 해결됩니다.

0

DEBUG MACRO를 확인하십시오. 중요합니다. ASSERT와 같은 것 ...

디버그 모드에있을 때 컴파일됩니다.

릴리스 모드에서 코드를 컴파일하면 디버그 MACRO가 비활성화됩니다.