在Microsoft Visual Studio 2015 (v14.0)
我有一个包含3个项目的解决方案。
其中两个项目是DLL,另一个是可执行文件
可执行文件在运行时加载DLL并调用它们的函数并交换参数;使用Window的LoadLibrary
和GetProcAddress
API。
在Release
模式下,当我将Runtime Library
项目设置为Multi-threaded DLL
时,一切正常。对于Multi-threaded Debug DLL
模式,这是Debug
。
如果我为Multi-threaded
更改为Release
或Multi-threaded Debug
更改为Debug
,我会收到调试断言错误或内存访问冲突错误以及其他类型的错误。 (当我更改它时,我会为解决方案中的所有项目更改它。)
我需要使用Multi-threaded
选项,以便可执行文件在目标计算机上不需要C ++运行时库。我该如何解决这个问题?
答案 0 :(得分:0)
这是因为使用/MT
分隔实体的运行时(即DLL和可执行文件),每个实体都有自己的运行时,因此它们自己的堆,尝试在一个中分配内存并在另一个中释放它将最终错误。因为其他模块忘记了分配的内存
另一方面,使用/MD
所有模块共享相同的运行时,并且运行时知道在一个模块中分配的内存,它将能够在另一个模块中释放它。因为一个运行时实例管理整个内存。
修改强> 感谢 dxiv 评论。