在不同模块分配和释放内存时出错的原因
来源:互联网 发布:html页面嵌入php 编辑:程序博客网 时间:2024/05/23 19:49
问题:如果程序的模块中有一个链接到静态C/C++运行期库,那么在这个模块中分配内存而在另一个模块中释放这块内存将失败。
原因:造成失败的原因是分配和释放内存不是由相同的堆管理程序完成的,例如动态链接库中的堆在默认情况下是由msvcrt.dll中的堆管理程序管理的(以动态链接的方式),而exe程序的堆在默认情况下是由程序自己的代码管理(以静态链接的方式),由于它们的堆管理程序不同,当动态链接库分配的内存在exe程序中释放时就会出错,因为exe程序所在的堆并没有分配这块内存,而你却要求它释放这块内存。
解决方法:将程序中所有的模块都链接到C/C++运行期库Multithreaded DLL,修改后所有分配和释放堆上内存的操作都由同一个堆管理程序管理,这样便解决了问题。
注意:VC6中的STL在DLL和程序之间传递会出错。MS建议升级到更高版本或使用第三方STL。
- 在不同模块分配和释放内存时出错的原因
- 在不同模块分配和释放内存时出错的原因
- 关于Cross-Dll问题(在不同的模块之间申请和释放内存)
- 在一个模块中分配的内存在另外一个模块释放?
- Windows编程 在一个模块中分配的内存在另外一个模块释放?
- Windows编程 在一个模块中分配的内存在另外一个模块释放?
- 在一个模块中分配的内存在另外一个模块释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- delete释放空间时出错的原因!
- delete释放空间时出错的原因!
- Delphi分配或释放内存失败的原因
- 变量的内存分配和释放
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 过长参数列表 & 函数取代参数 & Inline Method
- Check Box 的使用方法
- weblogic之部署 (正好用到,就粘贴过来保存一下,供大家一起查阅)
- Guice(二)
- Guice(三)
- 在不同模块分配和释放内存时出错的原因
- 开发宝典:数据库设计技巧,你知道几个?
- void value not ignore
- 用spring的hibernateTemplate操作mysql blob
- Javascript中的线程以及获取动态Dom元素的问题--thread/appendChild/setTimeout
- linux学习必备!《目录结构总结》
- spring与guice的区别
- Java,Android常用包介绍
- Spring注解注入