MTD和MDd导致的问题

来源:互联网 发布:36氪的next网站源码 编辑:程序博客网 时间:2024/04/29 06:39

MTD指的是使用的运行时库为静态库LIBCRTD.LIB,MDD则使用动态库MSVCRTD.DLL运行时库作为链接版本;

 

静态库LIBCRTD.LIB在引用它的工程里自定义了该静态库需要创建的全局变量;

动态库MSVCRTD.DLL已经在DLL模块内部定义了全局变量;

 

对MALLOC和FREE函数的调用问题:

    工程A(EXE或LIB或DLL)使用MTD, A引用模块B.DLL, B.DLL使用MDD;此时A使用malloc和free函数时堆管理全局变量定义在A模块中,B.DLL使用malloc和free函数时堆管理全局变量定义在B模块中,当A使用B定义的内存空间并在A中使用free时因为调用的是A模块的内存管理全局变量从而导致出错;

     当A引用的不是B.DLL而是C.LIB,并且C.LIB使用MDD时;此时C.LIB相当于是A模块的代码,这时A模块同时使用了MTD和MDD从而导致链接无法通过,在A模块属性中选择“忽略导入库”也不能解决问题;只有通过修改A和C两个模块的运行时库模式一样才能解决问题;

0 0
原创粉丝点击