在我目前正在处理的程序中,我有包含std::vectors
的对象。当我尝试删除这些对象时,问题就出现了,没有内存从对象中释放出来。
我制作了一个最小的程序来测试它,并且无法使它在这个程序中正常工作。
这是我用来测试的程序。
#include<iostream>
#include<vector>
struct node{
std::vector<int> list;
bool isParent;
struct node* child;
~node(){
delete[] child;
}
node(){
isParent = false;
list.push_back(5); // comenting this line would make it work correctly
}
void divide_r(){
if (isParent){
for(int i = 0; i < 8; i++){
(child+i)->divide_r();
}
}else{
node *c;
c = new node[8];
child = &c[0];
isParent = true;
}
}
};
int main(){
node *root = new node;
for(int i = 0; i < 8; i++){
root->divide_r();
}
delete root;
sleep(10);
return 0;
}
所以,如果我向向量中推送任何内容,我就无法释放任何内存。
如果重要的话,我在ubuntu上使用 g ++ 。我做错了什么还是应该这样做?
我还尝试使用不同的方法从析构函数中的“list”中释放内存,但是因为“list”不在范围之内,所以我应该释放它。我猜是。
该程序将使用大约1.4GB的RAM,但在睡眠和程序退出之前没有任何内容被释放。
答案 0 :(得分:2)
尝试分配您的对象,然后删除它们。 分配新对象时,您会注意到,操作系统没有显示增加的内存使用量。
你也可以通过valgrind运行你的样本,你应该注意到,它不会抱怨内存泄漏。
原因很明显。 C库希望避免额外的调用操作系统分配和返回每个小块内存的开销。
相关主题:Linux Allocator Does Not Release Small Chunks of Memory,Does calling free or delete ever release memory back to the "system"