如何在 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
。在你的代码中,我在赋值后看不到 initialView
和 vi
之间的任何依赖关系——向量构造函数创建了 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
}
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
。在你的代码中,我在赋值后看不到 initialView
和 vi
之间的任何依赖关系——向量构造函数创建了 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
}