在我目前正在处理的程序中,我有包含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++ 。我做错了什么还是应该这样做?
我还尝试使用不同的方法从析构函数中的“列表”中释放内存,但由于“列表”会超出范围,我猜它应该被释放。
该程序将使用大约 1.4GB 的 RAM,但在睡眠和程序退出之前没有任何内容被释放。