关于堆管理的讨论

liefeng999 2009-03-12 09:06:41
1。每个CRT都会有一个对应的堆
CRT的堆在dllmain()中通过调用一个API产生
2。如果两个release 版的CRT(注意,是两个),前者静态链接于a.dll,后者动太链接于b.exe

那么:
b.exe中:
VOID EXEFunc() {
PVOID pv = DLLFunc();
// Access the storage pointed to by pv...
// Assumes that pv is in EXE's C/C++ run-time heap
free(pv);
}


a.dll中:
PVOID DLLFunc() {
// Allocate block from DLL's C/C++ run-time heap
return(malloc(100));
}
如果版本相同,这是没有错误的。
以上的论断是正确的吗
...全文
79 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蜥蜴枪王 2009-03-13
  • 打赏
  • 举报
回复
UP~~
chin_chen 2009-03-13
  • 打赏
  • 举报
回复
不会有什么后果吧。
videosender 2009-03-13
  • 打赏
  • 举报
回复
先mark 一下.
简单回答, 会有问题的.
第一个可能不太好避免,但是是会出错的.两个静态链接的crt会用不同的堆.
第二个情况肯定不行,不过干嘛要那样挑战运行库呢,老老实实申请释放不好吗?
lingyin55 2009-03-12
  • 打赏
  • 举报
回复
先up
liefeng999 2009-03-12
  • 打赏
  • 举报
回复
3。
如果有

int *p=new int[50];
p++;
delete[] p
有什么样的后果?
还是delete[]已经对free封装得很好,以致于上述的不会产生汇漏

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧