2010-04-30 73 views
0

如果我在循環中有下面幾行:C++指針簡單的問題

Type *unite = new Type(newSize); 

double *array= new double[anySize]; 

什麼是什麼顧慮內存,如果我沒有刪除裏面的運營商的行爲它?它會不斷地在不同的內存位置分配對象和數組,從而導致內存泄漏?

回答

12

是的。這:

for (int i = 0; i < 10; ++i) 
{ 
    Type* unite = new Type(newSize); 
} 

將分配10個對象,類型Type,所有在不同的位置。它們中的任何一個都不會被釋放,最後你將不會有指向任何一個的指針。你會泄漏10 * sizeof(Type)字節的內存。

類似地,本

for (int i = 0; i < 10; ++i) 
{ 
    double *array= new double[anySize]; 
} 

意願出於同樣的原因泄漏10 * anySize * sizeof(double)字節的內存。

+0

只是一個小細節,但不應該有一些恆定的空間開銷的陣列分配,如'10 * anySize * sizeof(double)+ c'? – 2010-04-30 15:12:56

+0

爲了存儲數組的大小信息,並不要求實現過度分配。例如,數組大小數據可能存儲在某個表中,無論分配是否發生,都會存在。所以雖然你說得對,也會有一些開銷也被泄露,但是不可能量化多少(甚至像'+ c'這樣的普遍性,因爲這意味着開銷通過分配增加'O(n)' ,這不一定是真實的)以適用於所有實現的方式。 – 2010-04-30 16:53:51

1

它會不斷地在不同的內存位置分配對象和數組,因此內存泄漏?

假設你的意思是這樣的:

for (;x;x) 
{ 
    double *ptr = new double[42]; 
} 

那麼答案是肯定的,內存泄漏。