【发布时间】:2015-02-12 12:18:12
【问题描述】:
该程序创建 5,000,000 个对象并将这些对象推入一个列表。然后它删除对象并且程序遭受内存泄漏。我找到了一些关于 glibc 的信息。上面说glibc会造成内存碎片,所以我改用tcmalloc,但同样不能恢复内存。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <list>
using namespace std;
class basicClass
{
public:
basicClass()
{
a = 0;
b = 0;
c = 0;
}
virtual ~basicClass()
{
// cout<<"basic class release\n";
}
public:
virtual int print()
{
cout<<"a:"<<a<<endl;
return 0;
}
protected:
int a;
int b;
int c;
int arr;
};
int main(void)
{
printf("init stat\n");
getchar();
list<basicClass*> classList;
for (int i = 0; i < 5000000; i++)
{
basicClass *pClass = new basicClass();
classList.push_back(pClass);
}
printf("insert finish\n");
getchar();
unsigned int i = 0;
for (list<basicClass*>::iterator iter = classList.begin(); iter != classList.end(); iter++)
{
i++;
delete *iter;
}
classList.clear();
printf("release finish\n");
printf("release count:%d\n", i);
getchar();
return 0;
}
【问题讨论】:
-
是什么让您相信存在内存泄漏?你说这是事实,但你有什么证据?
-
所以你的问题是“为什么内存泄漏”?
-
我使用命令“ps -aux|grep a.out”查看内存信息。我在打印“插入完成”和打印“释放完成”后使用此命令,它显示内存不' t减少。所以我认为程序发生内存泄漏。
-
是的,你是对的。谢谢。我通过使用“malloc_trim(0)”来解决它。
标签: c++ memory-leaks