C++内存泄漏
C++ Memory leak
Hi我有下面的代码,它从slaveQueue和preload到preload1和preload2,但内存总是在增加。我认为它应该在我调用dfs后释放,因为所有的内存都应该在本地函数返回后释放,并且我检查了pop()函数也会释放内存?所以我想知道我的记忆泄漏在哪里?THanks
queue<Graphnode> *preload1 = new queue<Graphnode>;
queue<Graphnode> *preload2 = new queue<Graphnode>;
for(int n = windowWidth; n > 0; n--)
{
if((*slaveQueue).empty())
{
//cout <<"fffffffffffff"<<endl;
break;
}
(*preload2).push((*slaveQueue).front());
//cout << (*slaveQueue).size()<<endl;
(*slaveQueue).pop();
}
int preload1No =0;
while(!(*preload2).empty())
{
preload1No++;
*slaveroot = (*preload2).front();
(*preload2).pop();
if(!(*slaveQueue).empty())
{
(*preload2).push((*slaveQueue).front());
(*slaveQueue).pop();
}
dfs(*slaveroot,goal,totalDepth,*preload1,*preload2,checkfile);
if(preload1No>windowWidth)
{
(*preload1).push(*slaveroot);
(*preload1).pop();
}
else
{
(*preload1).push(*slaveroot);
}
cout<<(*preload1).size()<<"t"<<(*preload2).size()<<endl;
}
delete slaveroot;
delete preload1;
delete preload2;
delete slaveQueue;
是的,它会复制指针a
,但不会复制a
指向的内存。因此,这里没有内存泄漏,因此没有任何可用空间。
func1
中的a
是按值传递的,这意味着它在堆栈上。因此,它不会创建任何内存泄漏。func
退出时释放。
如果您没有在func1
中显式分配任何内存,并且没有调用这样做的函数,那么就没有内存泄漏。复制到函数中的只是一个指针。复制的指针本身在函数的堆栈上,一旦函数返回,它就会与函数范围内的所有其他指针一起弹出。
如图所示,您的代码没有内存泄漏。
它确实在堆栈上创建了a
的副本。但一旦函数返回,内存就会被恢复。
如果内存泄漏,很可能是由此处未显示的代码引起的。
将a
传递给函数时,传递的是a
本身的副本。当函数退出时,a
的副本将被销毁。a
指向的内存根本不会复制到代码中。
您的代码泄漏了一个字节的内存1,因为您在无限循环中调用func1
,所以delete a;
永远不会执行。然而,当大多数人谈论/思考内存泄漏时,他们想到的是"渐进式"泄漏——程序运行的时间越长,泄漏的内存就越多。
- 如果你想获得技术,它泄漏的是来自内存管理器的一个最小大小的块。它通常会大于1个字节,但具体大多少取决于实现
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存