vs中的MD与MDd设置不对时会出现访问非法地址的情况

项目中遇到一个奇怪的问题:dll外访问dll的数据会崩溃,但是在dll内部访问就正常,按照正常的逻辑应该是,只要通过dll提供的接口获取到数据的地址,就应该可以正常访问该地址下面的数据,但是这次的现象让我对以往的“经验”有了新的看法,特此记录备忘!

具体情况如下:

项目中引用了一个公司的内部dll库(MD方式编译),由于开始创建这个项目的时候修改了Release版本的编译方式,改为MDd的方式编译,这时为后面的调试埋下了炸弹,因为这种编译方式与我所引用dll库的编译方式不同,最终会导致一些奇怪的现象:

就是运行时只要在dll外部访问了dll中的数据就会崩溃,我一直很郁闷,因为之前都是没问题的,于是我开始怀疑的引用的另一个第三方开源库(restbed4.7版本),因为restbed4.7版本使用的必须是1.12.0版本的asio库,而我的项目使用的是boost1.70.0中的asio版本,我担心2个版本不一致导致的问题,后来我把所有用到restbed的地方都去掉了,并且去掉了restbed库的引用。结果还是会出现dll外访问dall中的数据会崩溃。后来实在没辙就开始逐个检查项目的工程配置项。结合这个bug的特征(dll外访问dll的数据会崩溃,但是在dll内部访问就正常),检查到“c/c++ ==> 代码生成 ==> 运行库” 的设置时才恍然大悟,原来是我之前为了调试方便,把Release版本中的MD改成了MDd。

所以在引用第三方库的时候一定要确认你的项目与所引用的库的编译方式是否一致,本次只是对MD与MDd做了测试,MT与MTd没有测试,不清楚会不会也出现这种情况,等这个项目结束之后再抽时间验证一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mahong100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值