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

时间:2013-06-28 14:26:07

标签: c++ stdvector

在我目前正在处理的程序中,我有包含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,但在睡眠和程序退出之前没有任何内容被释放。

1 个答案:

答案 0 :(得分:2)

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

你也可以通过valgrind运行你的样本,你应该注意到,它不会抱怨内存泄漏。

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

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