MTD和MDd导致的问题

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值