如何在C ++中释放指定的静态值?

时间:2015-01-06 16:09:30

标签: c++ memory-leaks free

Valgrind报告我的代码(如下所示)导致内存泄漏。

view *vi = new view(IPs);
initialView = *vi;
//delete vi;

所以,我添加了删除。但是删除vi会使initialView变空!并且导致valgrind的几个问题。我该怎么办?

顺便说一下,这是类视图的相等运算符!

view & operator = (const view& v){
        vp = std::vector <process>(v.vp);
    return *this;
}

3 个答案:

答案 0 :(得分:2)

使用new命令时,会从堆或空闲存储中为指针分配内存位置。问题是,在通过指针使用此内存位置后,程序员必须使用delete命令显式地取消分配该内存块。否则,程序将耗尽动态内存并崩溃。基本上,这就是内存泄漏所导致的。

当使用delete pointer时,它只是将pointer的值重置为null,并使内存块可以重新使用。您所要做的就是删除指定使用后使用的指针。 例如:

for(int i=0;i<1000;i++)
    {
    int* ptr=new int;
    *ptr=i;
    cout<<*ptr;  // ptr has been used, don't need it anymore
    delete ptr; //if you don't use this, memory leak will occur
    }

答案 1 :(得分:1)

如果可能,您可以将此原始指针替换为shared_ptr。它基于引用计数,因此当没有人指向它时可以处理释放内存。

答案 2 :(得分:1)

从你的代码中,很难说。您在标题中引用了哪些静态变量?

为了让valgrind高兴,你当然必须删除vi。在您的代码中,我无法在分配后看到initialViewvi之间的任何依赖关系 - 向量构造函数会创建v进程列表的副本,并且如果这些进程没有被vi删除,这应该没问题。如果存在导致问题的其他依赖项,请尝试消除它们。