我有一個關於我的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時泄漏 –