如何释放包含std::向量的对象的内存
How can I free memory of a object containing a std::vector
在我当前正在处理的程序中,我有包含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,但在睡眠和程序退出之前,没有任何东西被释放。
尝试分配对象,然后删除它们。当您分配新对象时,您会注意到,操作系统并没有显示内存使用率的增加。
您也可以通过valgrind运行您的样本,您应该注意到,它不会抱怨内存泄漏。
原因是显而易见的。C库希望避免调用操作系统来分配和返回每一小块内存的额外开销。
相关线程:Linux Allocator不释放小块内存,调用free或delete会将内存释放回"内存";系统";
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 迭代时从向量和内存中删除对象
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 如何创建从同一类继承的不同对象的向量
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 从多个源构造一个对象,包括一个对象向量
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区
- 将向量对象存储在共享指针投掷错误中
- E0312,C2664尝试将向量对象作为函数参数传递时错误
- 相对于向量对象的两个成员,找到两个向量的相交的有效方法
- 将数据从文件读取到向量对象
- C 向量对象访问
- 向量对象声明后的括号是什么意思
- 2向量对象指向相同的分配内存
- 如何返回向量对象
- 传递单个或向量对象时没有重载函数的实例
- 指向数组和向量对象的指针
- 向量对象库,可以存储其他对象类型的对象
- 如何从另一个向量/对象集构造新的向量/指针集