【发布时间】:2017-11-07 16:30:14
【问题描述】:
我们如何释放分配给列表的内存?在下面的代码中,即使在清除列表并删除指向列表的指针之后,它也不会释放内存。我可以在系统监视器中看到程序占用的内存。 有没有一种有效的方法来删除分配给列表的内存?
struct Plot
{
int BUFFER[65535];
int BUFFER1[65535];
int BUFFER2[65535];
int BUFFER3[65535];
int BUFFER4[65535];
};
int main(int argc, char *argv[])
{
std::list<Plot> *LIST= new std::list<Plot>();
Plot PLOT;
int i=0;
while(i<1500)
{
(LIST)->push_back(PLOT);
i++;
usleep(100);
}
LIST->clear();
delete LIST;
while(1)
{
usleep(100);
}
}
【问题讨论】:
-
分配的内存被正确释放,没有泄漏。您不能为此依赖系统监视器,因为 C++ 库的内部隐藏了很多东西,例如释放的内存可能不会立即返回给系统,但库可以将其放入它自己的空闲内存池中并且从该池中进行后续分配,而不是直接从系统请求内存。它完全依赖于实现。
-
如果您担心严格的内存管理,请考虑使用自定义分配器。
-
这只是一个示例代码。我有类似的代码,其中内存无限增加。 Valgring 还显示了 new 运算符的内存泄漏。
-
@RajatSati 在其他代码中可能存在另一个问题。尝试将你的
main函数的内容放入一个无限循环中,我确信内存使用不会无限增加。 -
不要使用 new,特别是对于 std 容器。不要使用拥有原始指针。
标签: c++ list memory-management memory-leaks stdlist