在不同模块分配和释放内存时出错的原因
来源:互联网 发布:法恩莎 智能马桶 知乎 编辑:程序博客网 时间:2024/05/23 20:02
问题:如果程序的模块中有一个链接到静态C/C++运行期库,那么在这个模块中分配内存而在另一个模块中释放这块内存将失败。
原因:造成失败的原因是分配和释放内存不是由相同的堆管理程序完成的,例如动态链接库中的堆在默认情况下是由msvcrt.dll中的堆管理程序管理的(以动态链接的方式),而exe程序的堆在默认情况下是由程序自己的代码管理(以静态链接的方式),由于它们的堆管理程序不同,当动态链接库分配的内存在exe程序中释放时就会出错,因为exe程序所在的堆并没有分配这块内存,而你却要求它释放这块内存。
解决方法:将程序中所有的模块都链接到C/C++运行期库Multithreaded DLL,修改后所有分配和释放堆上内存的操作都由同一个堆管理程序管理,这样便解决了问题。
注意:VC6中的STL在DLL和程序之间传递会出错。MS建议升级到更高版本或使用第三方STL。
原因:造成失败的原因是分配和释放内存不是由相同的堆管理程序完成的,例如动态链接库中的堆在默认情况下是由msvcrt.dll中的堆管理程序管理的(以动态链接的方式),而exe程序的堆在默认情况下是由程序自己的代码管理(以静态链接的方式),由于它们的堆管理程序不同,当动态链接库分配的内存在exe程序中释放时就会出错,因为exe程序所在的堆并没有分配这块内存,而你却要求它释放这块内存。
解决方法:将程序中所有的模块都链接到C/C++运行期库Multithreaded DLL,修改后所有分配和释放堆上内存的操作都由同一个堆管理程序管理,这样便解决了问题。
注意:VC6中的STL在DLL和程序之间传递会出错。MS建议升级到更高版本或使用第三方STL。
- 在不同模块分配和释放内存时出错的原因
- 在不同模块分配和释放内存时出错的原因
- 关于Cross-Dll问题(在不同的模块之间申请和释放内存)
- 在一个模块中分配的内存在另外一个模块释放?
- Windows编程 在一个模块中分配的内存在另外一个模块释放?
- Windows编程 在一个模块中分配的内存在另外一个模块释放?
- 在一个模块中分配的内存在另外一个模块释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- 内存分配和释放
- delete释放空间时出错的原因!
- delete释放空间时出错的原因!
- Delphi分配或释放内存失败的原因
- 变量的内存分配和释放
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 分配和释放 BSTR 的内存
- 生活常识
- the first weblog in csdn
- linux下查看进程/线程
- 软件设计师考试要点
- 虚函数什么情况下会内联
- 在不同模块分配和释放内存时出错的原因
- 3 款 SQL INJECTION 攻击检测工具
- C语言库函数理解
- 病毒运行方式和查杀
- 祝大家圣诞快乐
- 寻找素数 Google题
- DispatchAction的详细说明
- 打印位图上
- 传统服务往移动领域的迁移