gpt4 book ai didi

c++ -/MTd 会触发断点但/MDd 不会

转载 作者:行者123 更新时间:2023-11-30 02:55:06 26 4
gpt4 key购买 nike

我有一个关于多线程调试 DLL (/MDd) 和多线程调试 (/MTd) 设置的问题。它们之间的区别很明显:一个是使用动态库,一个是使用静态库。当我使用/MDd 编译我的程序时,一切都进行得很好。但是,当我将设置更改为/MTd 并运行程序时,Visual Studio 将在程序中触发断点并弹出消息框。消息如下:

Windows has triggered a breakpoint in application.exe.

This may be due to a corruption of the heap, which indicates a bug in application.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while application.exe has focus.

The output window may have more diagnostic information.

我想知道在这种情况下我接下来能做什么。谢谢!

最佳答案

您的应用程序中包含的其他一些库可能是针对 DLL 运行时库编译的。如果是这样,那么当您尝试将可执行文件链接到静态运行时库时,您最终会得到两个拷贝:一个静态拷贝和一个动态拷贝。根据内存分配模式,这可能导致库的一个实例具有关于堆的不完整信息。由于库的调试版本尝试检测堆损坏,因此您会看到错误。 (请注意,对于发布版本,您可能仍然会遇到错误,只是不会收到通知。)

在决定链接静态或动态运行时库时,通常需要全有或全无。而且,如果您包含标准操作系统以外的 DLL,您几乎肯定需要动态运行时,以便进程中的所有内容都使用相同的实例。

关于c++ -/MTd 会触发断点但/MDd 不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16696923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com