DLL与EXE之间的内存 new 与 delete 上的问题

831 篇文章 16 订阅
300 篇文章 0 订阅

最近在做的一个项目,我们的一个EXE调用了DLL,其中EXE会使用DLL new出来的变量指针,而且会在EXE delete这些指针,同样,DLL也会使用及delete由EXE new出来的变量指针。
开始在做测试的时候没有发现任何问题,当时用的是DEBUG版本。 可是后来发现Release版本运行程序时总是会崩,于是开始疯狂地调试,终于找到了导致崩溃的原因:
我们的Release版的EXE和DLL都是用/MT 编译选项编译的,也就是静态链接C/C++的运行时库,而这时,EXE和DLL各自拥有独自的堆(Heap)空间,所以其中一方在其堆中new出来的内存,只能由其自己来delete,否则就会产生问题(也就是我们碰到的崩溃...).
解决方法有很多种,我采用的方法就是改了改代码,让DLL delete 自己 new 出来的东西,EXE也同样如此。测试后程序没有出现问题。
-------------------------------------------------------------------------------------------
贴上几个相关的链接,很有帮助:
(英文)
memory allocations in dll
Deleting memory from DLLs (C++)
(中文)
DLL和exe里的malloc和free不能混用
在DLL中用CRT静态库申请内存,EXE释放是不行的
DLL分配的内存如何在EXE里面释放

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值