코드에서 개체를 삭제할 때 충돌로 고통받는 이상한 문제가 있습니다. 개체가 유효하며 메모리 누수가 없으므로 덮어 쓸 수 있으며 디버그 모드에서만 발생합니다. Linux에서 컴파일 된 동일한 코드가 디버그 및 릴리스 빌드에서 모두 잘 작동합니다. 그래서 나는 그것이 Visual Studio debug-CRT에 이상한 문제라고 생각합니다.정적/동적 라이브러리 혼합에서 Debug-CRT를 연결할 때 충돌이 발생합니까?
다음과 같이 내 소프트웨어가 구성되어:
두 정적 라이브러리는 "멀티 (디버그) DLL을 스레드"모드로 컴파일하고 함께 연결되어 있습니다 : 모드에서 컴파일 공유 라이브러리 (DLL) "멀티 스레드 (디버그) ". 논리에서 나는 그것이 다른 방향으로 이어져야한다고 말하고 싶지만, 나는 미해결 된 상징의 엄청난 양을 얻는다.
마지막으로 위에서 언급 한 DLL을 호출하는 "다중 스레드 (디버그) DLL"모드로 컴파일 된 실행 파일이 있습니다. 여기에 "멀티 스레드 (디버그)"로 전환해도 차이가 없습니다.
개체 삭제에 충돌이 dbgheap.c에서 일어나는/_heap_alloc_dbg_impl() -> mlock.c/_unlock() - 그래서
의 기능 : 어떤 문제가 될 수 있을까? 디버그 모드에서 CRT와 호환되지 않습니까? 아니면 다른 이유가있을 수 있습니까? 리눅스와 릴리스 빌드에서 원활하게 작동하기 때문에 일반적인 메모리 누수가 아니라고 확신합니다.
공유 라이브러리 (DLL) 컴파일 설정을 "다중 스레드 디버그 DLL"(/ MDd 컴파일러 스위치)으로 변경하십시오. CRT 설정은 각 라이브러리 및 .EXE에 대해 동일해야합니다. –