2011-06-10 101 views
1

我只是想確保我正確地在我的程序釋放內存...內存釋放問題

我在一個函數建立一個動態分配的二維數組(build_proc_table()),並返回數組的地方該函數被調用(main())。該陣列被存儲在一個變量在main()和I由「析構」功能,解除分配存儲器,但析構函數在main()爲好,不其中對於該陣列的存儲器最初是在分配調用(在build_proc_table ())...

我沒有得到任何錯誤或任何東西(編譯時或運行時)和程序功能完全一樣我把它wan't到,我只是想確保我不導致內存泄漏。

回答

2

手動分配的任何存儲器具有被未綁定到其範圍一生。只要分配給某個地方的內存在以後的某個地方被釋放,你就會好起來的。它從哪裏來的並不重要。

+0

真棒,謝謝! – 2011-06-10 23:59:11

+0

這對所有語言都適用嗎?我使用C++ btw。 – 2011-06-10 23:59:45

+0

@Aaron:我不知道宇宙中的每種語言,但C++(以及我所知道的每種具有手動內存管理的語言)都是如此。 – 2011-06-11 01:14:10

2

不知道你使用的語言,具體是困難的。但是,只要不改變分配和釋放之間的引用,就不會將內存釋放到何處。但是,如果更改分配和釋放之間正在尋址的內存地址(在更改之前未釋放內存地址),則會發生內存泄漏。

在C++中,例如...

int main(){ 
    int* j = new int[10]; 
    j = new int[10]; 
    delete j; 
} 

這將是一個內存泄漏,因爲第一陣列沒有被刪除。這顯然是一個簡單的示例,不是使用函數。