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

请问stl vector使用时内存不断上涨? 有内存泄露

2012-04-14 
请教stl vector使用时内存不断上涨? 有内存泄露?反复执行func,内存会不断缓慢上涨,每次大概会增加10-100个

请教stl vector使用时内存不断上涨? 有内存泄露?
反复执行func,内存会不断缓慢上涨,每次大概会增加10-100个字节

C/C++ code
    class A    {                vector<int> v1;        int num;        A()        {            num = 0;        }        ~A()        {            clear();        }        clear()        {            v1.clear();            num = 0;        }        void add(int x)        {            v1.push_back(x);            num++        }    }    void func();    {        vector<A> av;        A a1;        for (int i = 0; i < 60000; i++)            for (int j = 0; j < 3; j++)            {                a1.clear();                al.push_back(1);                a1.push_back(2);            }            av.clear();    }


[解决办法]
//我用capacity函数帮你测试了一下。如果你调用了clear函数,就不会出现重新申请更大内存的情况···
 void func();
{
vector<A> av;
A a1;
for (int i = 0; i < 60000; i++)
for (int j = 0; j < 3; j++)
{
a1.clear();
al.push_back(1); //类中没有push_back函数
a1.push_back(2);
}

av.clear();

}


[解决办法]
因为clear不会释放内存
对象析构时才会
释放内存可以:
vector<A> tmp;
tmp.swap(al);
tmp析构则内存释放
[解决办法]
你退出程序就好了,退出程序会调用析构的
不过这不算泄漏, 只是STL管理内存的方式
[解决办法]
人家用了这么久的东西就被你轻易的否定了。
[解决办法]
探讨

因为clear不会释放内存
对象析构时才会
释放内存可以:
vector<A> tmp;
tmp.swap(al);
tmp析构则内存释放

[解决办法]
STL vector有他自己的内存管理方式。另外,你如果测试debug和release同样也会发现内存的变化不一致哦。呵呵。

热点排行