如何在 C++ 中释放分配的静态值?

How to free an assigned static value in C++?

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

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

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

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

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

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

从你的代码来看,很难说。您在标题中指的是哪些静态变量?

为了使 valgrind 快乐,您当然必须删除 vi。在你的代码中,我在赋值后看不到 initialViewvi 之间的任何依赖关系——向量构造函数创建了 v 的进程列表的副本,如果这些进程不是用vi删除,这样应该没问题。如果还有其他依赖项导致您出现问题,请尝试消除它们。

当您使用 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
    }