我有一个奇怪的问题,我在删除代码中的对象时遇到崩溃。对象是有效的,没有可能覆盖它们的内存泄漏,并且仅在调试模式下发生。使用 Linux 编译的相同代码在调试和发布版本中都可以正常工作。所以我猜这是 Visual Studio 调试 CRT 的一些奇怪问题。
我的软件结构如下:
两个静态库在“多线程(调试)DLL”模式下编译并链接到: 在“多线程(调试)”模式下编译的共享库(DLL)。从逻辑上我会说它应该是相反的,但后来我得到了大量未解析的符号。
最后有一个在“多线程(调试)DLL”模式下编译的可执行文件,它调用上面提到的DLL。当我切换到“多线程(调试)”时,这并没有什么不同。
对象删除崩溃发生在 dbgheap.c / _heap_alloc_dbg_impl() -> mlock.c / _unlock() - 一个函数
那么:可能是什么问题?调试模式下真的是 CRT 不兼容还是其他原因?我很确定这不是典型的内存泄漏,因为它可以在 Linux 和发布版本中顺利运行。