我有一个关于我的C++代码中的内存管理的一般问题。编译器抱怨说,当我用一个指向我已经在堆栈上动态初始化的对象的新指针替换指向对象的指针时,存在潜在的内存泄漏。例如:C++指针和堆栈内存管理
int* foo(int* h){
int* b = new int(5);
b = h; //Memory leak here. How do I delete b without creating a dangling pointer?
return b;
}
然后我用这个功能来改变指针
int i = 1; int* c = &i; foo(c);
的状态所以我的问题是我有一个具有类似于上面的一个函数的类。 什么时候可以从foo函数中删除b?
delete b;
将这个进入析构函数(这不会帮助我,因为我使用的时间函数foo的负荷。因此堆将得到可能使用起来....?)
如果我上面没有提供足够的信息。请告诉我。
让我们从基础开始:你的函数'foo'不修改值由它的参数指向的。它应该做什么? – Jon
'foo(c);'不要做任何事'c' – rmflow
老实说,我不明白你的问题..但存在内存泄漏的风险,例如:foo(new int);这里int会在你调用foo时泄漏 –