DLL与EXE之间的内存 new 与 delete 上的问题
来源:互联网 发布:数据统计分析模板 编辑:程序博客网 时间:2024/06/10 23:24
最近在做的一个项目,我们的一个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里面释放
开始在做测试的时候没有发现任何问题,当时用的是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里面释放
- DLL与EXE之间的内存 new 与 delete 上的问题
- DLL与EXE之间的内存 new 与 delete 上的问题
- DLL与EXE之间的内存 new 与 delete 上的问题
- Vector的new与delete问题
- exe中用new一块内存,但是在dll程序中delete引发的错误
- 在DLL间或者DLL与EXE之间传递vector对象或指针的问题
- 关于DLL new exe delete问题
- new/delete与malloc/free之间的联系和区别
- C++ 方式的内存分配与释放 new 和 delete
- C++【堆内存的动态分配与释放(new/delete)】
- new与delete的作用
- new与delete的使用
- new与delete的重载
- 在new与delete之间
- 生死疆界(上)--- 在new与delete之间
- 生死疆界(上)--- 在new与delete之间
- 在DLL与EXE之间传递STL容器对象的问题总结
- OBJ、LIB、DLL与EXE之间的关系
- 将邻接表表示的图转换为孩子兄弟法表示的二叉树
- 2.4.2 存储检查
- 在DLL中用CRT静态库申请内存,EXE释放是不行的
- 2.4.3 网络检查
- Call to localhost/127.0.0.1:9000 failed on connection exception:java.net.ConnectException
- DLL与EXE之间的内存 new 与 delete 上的问题
- 2.5 配置数据库服务器 2.5.1 安装软件包
- 2.5.2 修改系统参数
- C陷阱与缺陷
- 每秒100帧的行人检测方法
- Hibernate深入之get()与load()懒加载
- DM9000驱动理解二(挂起和恢复)
- linux tr命令详解
- as3.0向addEventListener 后面参数传值