DLL / exes将需要链接到C运行时库的实现。
对于C Windows运行时库,如果希望链接到以下内容,则可以选择指定:
- 单线程C运行时库(现已停止对单线程库的支持)
- 多线程DLL /多线程调试DLL
- 静态运行时库。
- 更多(您可以检查链接)
它们中的每一个都将引用一个不同的堆,因此不允许您从一个运行时库的堆获得的地址传递给另一个。
现在,它取决于您所讨论的DLL已链接到哪个C运行时库。假设,您正在使用的DLL已链接到静态C运行时库,而您的应用程序代码(包含主函数)已链接到多线程C运行时DLL,那么如果您将指针传递给在DLL到您的主程序,然后尝试将其释放,反之亦然,这可能导致未定义的行为。因此,根本原因是C运行时库。请仔细选择它们。
请在此处和此处找到有关支持的C运行时库的更多信息
来自MSDN的报价:
注意 请勿混合使用静态版本和动态版本的运行时库。
进程中有多个运行时库副本可能会导致问题,因为一个副本中的静态数据不会与另一副本共享。链接器可防止您同时链接一个.exe文件中的静态版本和动态版本,但最终仍可以得到两个(或更多)运行时库副本。例如,与运行时库的动态(DLL)版本链接的.exe文件一起使用时,与运行时库的静态(非DLL)版本链接的动态链接库可能会导致问题。
。(您还应避免在一个过程中混合使用库的调试版本和非调试版本。)



