C++ 如何处理由于项目中涉及的库的不同构建标志而产生的currupted heap错误(在调试模式下)
简介:C++ 如何处理由于项目中涉及的库的不同构建标志而产生的currupted heap错误(在调试模式下),c++,debugging,dll,build,heap-corruption,C++,Debugging,Dll,Build,Heap Corruption,简介: 我正在重构win32应用程序,我使用VS2008。 该应用程序由我自己的dll和第三方dll组成 问题: 当我在调试模式下运行应用程序并执行某些操作时,会出现错误:应用程序程序触发了断点,堆已损坏 采取的行动: 我搜索了internet,发现此错误可能是因为项目中的dll使用了不同的生成标志(多线程调试/MD和多线程调试dll/MDd)(这导致它们使用不同的c运行时库,对于每个库,都会维护自己的内存工作列表,因此这可能会导致堆损坏)。 我已经检查了我的dll——它们都有相同的标志:调试多
我正在重构win32应用程序,我使用VS2008。 该应用程序由我自己的dll和第三方dll组成 问题:
当我在调试模式下运行应用程序并执行某些操作时,会出现错误:应用程序程序触发了断点,堆已损坏 采取的行动:
我搜索了internet,发现此错误可能是因为项目中的dll使用了不同的生成标志(多线程调试
/MD
和多线程调试dll/MDd
)(这导致它们使用不同的c运行时库,对于每个库,都会维护自己的内存工作列表,因此这可能会导致堆损坏)。
我已经检查了我的dll——它们都有相同的标志:调试多线程dll。因此我认为第三方dll中的一个可能是使用多线程调试标志构建的
问题:
- 有没有可能找出第三方图书馆是什么 建成,如果是这样,我如何才能做到这一点
- 我怎样才能把我的问题告诉你 不同的构建标志
- 我猜这个错误是由于 不同的构建标志是否正确
你犯的最大错误是在这里问这个问题。你应该和第三方雇佣的程序员谈谈,他已经在这个DLL上工作过了。他会知道你问题的确切答案,并且可以很容易地解决你的问题。如果你不能得到这种支持,那么你应该不要使用这些DLL,t嘿,这会让你的生活在很长一段时间内痛苦不堪。当你运行发布版本时,你会遇到这个问题吗?我认为这可能不是标志问题。如果是标志,你的程序将根本无法编译。不仅仅是/M选项的不同选择,那些DLL可能使用的是完全不同的CRT版本。你需要重新编译使用相同的设置和相同的编译器对它们进行测试。@Captain Obvlious我还没有尝试运行发布版本,这是一个非常大的项目,创建发布版本将非常耗时,因此这是我将要做的最后一个选项try@HansPassant如果我只有第三方库的二进制文件,如何重建该库(我没有源代码)