gpt4 book ai didi

c++ - 如何释放包含 std::vector 的对象的内存

转载 作者:行者123 更新时间:2023-11-28 03:14:30 26 4
gpt4 key购买 nike

在我目前正在处理的程序中,我有包含 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;
}

所以,如果我将任何东西压入 vector ,我就无法释放任何内存。

如果重要的话,我在 ubuntu 上使用 g++。我做错什么了吗?或者这应该行得通吗?

我也曾尝试使用不同的方法从析构函数中的“列表”中释放内存,但由于“列表”将超出范围,我想无论如何都应该释放它。

该程序将使用大约 1.4GB 的 RAM,但在 sleep 和程序退出之前没有释放任何内存。

最佳答案

尝试分配您的对象,然后删除它们。当您分配新对象时,您会注意到,操作系统并没有显示内存使用量增加。

您也可以通过 valgrind 运行示例,您应该注意到,它不会提示内存泄漏。

原因很明显。 C 库希望避免调用操作系统分配和返回每个小内存块的额外开销。

相关主题:Linux Allocator Does Not Release Small Chunks of Memory , Does calling free or delete ever release memory back to the "system"

关于c++ - 如何释放包含 std::vector 的对象的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17367018/

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