2015-02-05 34 views
1

我寫在C++使用Visual Studio 2013年,我注意到用下面的簡單的代碼的異常(實測here):C++使用浮動2D陣列內存泄漏,消失如果使用雙

const int HEIGHT = 1000; 
const int WIDTH = 100000; 
double **p2DArray; 

// Allocate memory 
p2DArray = new double*[HEIGHT]; 
for (int i = 0; i < HEIGHT; ++i) 
    p2DArray[i] = new double[WIDTH]; 

// De-Allocate memory to prevent memory leak 
for (int i = 0; i < HEIGHT; ++i) 
    delete[] p2DArray[i]; 
delete[] p2DArray; 

return 0; 

當我使用Windows的任務管理器在「return 0」上放置一個斷點,我可以看到應用程序的「內存」佔用空間爲0.3 MB。但是,如果我將「double」替換爲「float」或「int」,則得到「31.3 MB」。此外,通過修改HEIGHT/WIDTH,我得到不同數量的MB爲intfloatdouble的編號保持不變 - 0.3 MB。有人可以提供解釋嗎?

謝謝。

P.S.由於庫函數,我需要使用原始指針。

+2

'delete'和朋友釋放內存到C++運行庫;運行時是否將內存釋放回操作系統,導致您在任務管理器中看到的內存數量減少,取決於它。 – 2015-02-05 13:33:03

回答

2

你可以得到一個關於非常簡單的內存泄漏的調試報告,例如,使用Visual StudioValgrind

您的代碼不會產生泄漏,既不float也不double,它是完全正常的。在實踐中,你不應該依賴任務管理器給你的數字。它們至多是一個粗略的近似值,僅僅因爲你調用delete這並不意味着內存是立即回到操作系統。