急!! 内存释放,两个指针是释放一个不出内存,

小草sd 2012-01-12 11:30:23
void (DTableExp * obj)
{
delete obj;
}

void DestroyObj(v_obj * obj)
{
delete tobj;
}

void Destroyfun(DTableExp *ta,v_obj *tb)
{
DestroyDtable(ta);//释放第一个物体
DestroyObj(tb); //释放第二个物体
}

void fun()
{
...
...
Destroyfun(a,b);
m=k+d; //在这里加断点看内存情况
...
...
}


Destroyfun只释放ta,可以释放出大约20M内存(从任务管理器看),
Destroyfun只释放tb,可以释放出大约200M内存(从任务管理器看),
Destroyfun释放ta和tb,可以释放出大约500M内存(从任务管理器看),

为什么啊?我怎么也想不通。
以前一直是一起释放的,不会有什么问题。
现在内存因为资料大,后面内存分配不出来,这里先释放一部分,为什么只释放一个指针释放不出来呢 ?

头大,不懂,为什么?
求指点。
...全文
116 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2012-01-12
  • 打赏
  • 举报
回复
你管的太多了。。
小草sd 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 majia2011 的回复:]
lz,这种情况是出现了堆合并,呵呵呵

建议换成内存池,自己管理。
[/Quote]


“堆合并” ?不懂是什么啊。
换成内存池,自己管理?工程大了,项目紧急,怕来不急。
小草sd 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qscool1987 的回复:]
你的意思是说单个进行释放和一起释放会有差别?
这样,你先不管第一个释放后到底释放了多少内存,你只看两个都释放之后的内存是否有差别(同时释放和分开释放)
[/Quote]

是的,同时释放和分开释放差别太大。不懂啊
qscool1987 2012-01-12
  • 打赏
  • 举报
回复
你的意思是说单个进行释放和一起释放会有差别?
这样,你先不管第一个释放后到底释放了多少内存,你只看两个都释放之后的内存是否有差别(同时释放和分开释放)
majia2011 2012-01-12
  • 打赏
  • 举报
回复
lz,这种情况是出现了堆合并,呵呵呵

建议换成内存池,自己管理。
小草sd 2012-01-12
  • 打赏
  • 举报
回复
在断点处看任务管理器:
void Destroyfun(DTableExp *ta,v_obj *tb)
{
DestroyDtable(ta);//释放第一个物体
//DestroyObj(tb); //释放第二个物体
}
这样,可以释放出大约20M内存(从任务管理器看),


void Destroyfun(DTableExp *ta,v_obj *tb)
{
//DestroyDtable(ta);//释放第一个物体
DestroyObj(tb); //释放第二个物体
}
这样,可以释放出大约200M内存(从任务管理器看),


void Destroyfun(DTableExp *ta,v_obj *tb)
{
DestroyDtable(ta);//释放第一个物体
DestroyObj(tb); //释放第二个物体
}
这样,可以释放出大约500M内存(从任务管理器看),
恨天低 2012-01-12
  • 打赏
  • 举报
回复
表示不知道LZ在说什么。
小草sd 2012-01-12
  • 打赏
  • 举报
回复
对不起,第一个函数函数名没写
void DestroyDtable(DTableExp * obj)
{
delete obj;
}

void DestroyObj(v_obj * obj)
{
delete tobj;
}

void Destroyfun(DTableExp *ta,v_obj *tb)
{
DestroyDtable(ta);//释放第一个物体
DestroyObj(tb); //释放第二个物体
}

void fun()
{
...
...
Destroyfun(a,b);
m=k+d; //在这里加断点看内存情况
...
...
}
majia2011 2012-01-12
  • 打赏
  • 举报
回复
要不你就往硬盘上倒一遍,再从新malloc,这是个馊主意,估计应急可以了。

最好还是用内存池,自己控制。

堆合并,是系统内存管理方面的知识,在os类的书籍里有介绍。
always_learn 2012-01-12
  • 打赏
  • 举报
回复
DTableExp和v_obj的对象是怎样进行内存分配的?有没有重载new和delete?还有他们两者有什么关系没有?

64,646

社区成员

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

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