2012-09-02 3 views
1

here 디버깅을 시작할 때 정말 불쾌한 링커 오류가 발생했습니다.Visual C++ CRT 디버깅

new (_NORMAL_BLOCK , __FILE__ , __LINE__) 구조로 범위를 좁혔습니다. 이 새로운 연산자의 오버로드가 사용되자 마자 error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" ([email protected]@Z) already defined in ...

링크 파일에서 해당 오브젝트 파일을 제외하면 다른 파일로 연결됩니다. 나는 이것을 확인하지는 못했지만, MFC와 충돌하는 이들 모든 오브젝트 파일들은 새로운 버전의 디버그 연산자를 사용한다고 확신한다.

Google이이 오류를 범하면 모든 증거가 CRT와 MFC 자료를 잘못된 순서로 혼합하고 있다고 말하기 때문에 나는 야생 거위 추격전에 빠지게됩니다. 이것이 내가 한 일입니다.

dumpbin /directives으로 모든 오브젝트 파일과 라이브러리를 골라서 링크 순서가 올바른지 확인했습니다.이 모든 경우에도 오류가 발생하지 않았습니다.

CRT 디버깅 기술은 기본적으로 MFC와 호환되지 않습니까, 아니면 이에 대한 설명이 있습니까?

저는 MFC에 대해 잘 알지 못하고 있으며 MFC에서 완전히 벗어나려고 노력하고 있습니다.하지만 그럴 때까지는 제대로 작동하고 싶습니다.

+0

을 메모리 누수를 성공적으로 탐지합니다. 나 자신의 포장이나 우회로를 권하고 싶다. 또는 메모리 관리 도구 중 하나를 사용하십시오. –

+0

전체 링커 오류 메시지를 게시 할 수 있습니까? – john

+0

@ 존 물론 ... 도움이된다면. 전체 오류를 포함하도록 질문을 업데이트했습니다. 객체와 파일 이름 만 제거했습니다. –

답변

1

MFC 응용 프로그램은 디버그 모드에서 메모리 누수를 감지합니다. 다음과 같이 누수에 대한 자세한 정보를 얻으려면, 당신은 각 파일의 상단에 DEBUG_NEW 새로운 정의 할 수 있습니다 자세한 내용은

#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 

참조 내가 CRT가 두 번 거즈 사용하려고 MSDN 문서 Memory Leak Detection in MFC