gpt4 book ai didi

c++ - 数组的内存泄漏 C++ 列表

转载 作者:太空宇宙 更新时间:2023-11-04 15:12:57 25 4
gpt4 key购买 nike

我们有这样的代码:

  void main(){
std::list<int *> ll;
for(int i=0;i<100;i++)
{
int *a = new int[10000];
ll.push_back(a);
}
for(int *b : ll)
{
delete [] b;
}
ll.clear();

}

但是内存不是空闲的?为什么?运行此代码时正常工作:

void main(){
for(int i=0;i<100;i++)
{
int *a = new int[10000];
delete [] a;
}
}

我在 linux 和系统监控中使用 top 命令监控内存,所以在第一个代码中,内存在上升,然后我希望最后为应用程序释放内存而不是释放内存。

最佳答案

[I monitor memory] in linux with top command and system monitoring

此方法不会为您提供准确的结果。 Linux top 命令告诉您进程拥有多少内存,其中包括分配器从操作系统请求的内存。 top 不知道分配器已将多少内存分配给您的程序,以及保留多少以供将来分配给您的程序。

为了检查您的程序是否存在内存泄漏和其他与内存相关的错误,请使用内存分析工具,例如 valgrind .探查器会检测内存泄漏,并通知您程序中分配了未返回给分配器的内存块的位置。

注意:您的其他代码似乎工作的原因是分配器需要的内存少得多,因为在循环中重复分配和取消分配相同的内存块。

关于c++ - 数组的内存泄漏 C++ 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47285605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com