首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

delete失败的有关问题,非新手有关问题

2012-09-29 
delete失败的问题,非新手问题最近遇到一个比较诡异的问题,初步猜测可能和windows的内存回收机制有关出问题

delete失败的问题,非新手问题
最近遇到一个比较诡异的问题,初步猜测可能和windows的内存回收机制有关
出问题的代码如下

C/C++ code
    for(i = 0; i < vecSeg.size(); i ++ )    {        SEG *item = NULL;        item = vecSeg[i];                delete item;    }      if (1)    {        std::vector<SEG*> Stmp;        //释放vector占用的空间        //vecSeg.swap(Stmp);        Stmp.swap(vecSeg);    }

vecSeg定义 std::vector<SEG*> vecSeg;
运行到这段代码处,该vector占用了400多M内存,整个进程占内存1.6G左右,但是通过这种方式释放不掉。而同样的这段代码,往前移动过某些语句可以正常释放。

google了一下,发现一篇帖子
http://bbs.chinaunix.net/thread-351706-1-1.html
其中提到了内存的半释放和完全释放的概念,但是网上资料很少,有没有高人指点一下?

[解决办法]
swap释放的是容器本身的内存,这一点没有问题

vs2008 release /Od

C/C++ code
#define breakpoint _asm int 3int main(){    vector<int*> vec((int)1e8);    breakpoint // 400MB allocated        {        vector<int*> temp;        temp.swap(vec);    }    breakpoint // 400MB released    return 0;}
[解决办法]
想知道你初始化代码是怎么写的,怎么申请空间的
[解决办法]
SEG是不是重载了operator delete/new? 有自己的free list,没有真正释放内存到堆? 
探讨
最近遇到一个比较诡异的问题,初步猜测可能和windows的内存回收机制有关
出问题的代码如下


C/C++ code

for(i = 0; i < vecSeg.size(); i ++ )
{
SEG *item = NULL;
item = vecSeg[i];
delete item;
……

热点排行