2017-04-15 198 views
0

我有以下代碼,並詢問是否有任何內存泄漏。我相信「function」裏面有內存泄漏,因爲在a = new A()之後沒有刪除操作。 。我對嗎?內存泄漏點

class A 
{ 
public: 
    A(){}; 
    ~A(){}; 
private: 
    double d[10]; 
}; 

void function (A* a) 
{ 
    delete a; 
    a = new A(); 
} 

void main (void) 
{ 
    A* p = new A(); 
    function(p); 
    delete p; 
} 
+0

是的你是對的。 –

+1

它比僅僅有一個內存泄漏更糟......你也是在函數(A * a)和main()中一次刪除A ...的第一次分配。 – aSteve

+0

還有一個雙重刪除,因爲'p'被刪除兩次,一次在'function'中,一次在'main'中。 –

回答

1

這個程序應該崩潰失去記憶。

因爲主釋放內存p而崩潰,這已經在function內部發布。

失去內存,因爲在function中分配的a未被返回,並且在內部爲function

0

基本上我認爲會有什麼誤解。

你是對的,它是一個傳遞指針。這意味着該地址被壓入被調用函數的堆棧(或放入一個寄存器,取決於調用約定)。堆棧(或寄存器)中的這個地址用於釋放對象。最後,這個地址將被新操作員返回的地址覆蓋。

所以p沒有改變,因爲它在不在被調用者的調用者堆棧中。

+0

感謝您的解釋。我怎樣才能解決這個問題?我應該使用智能指針還是引用來避免內存泄漏? – Billyx24