2016-05-15 33 views
-2

我有這樣的代碼這實際上是動態內存分配嗎?

int e; 
scanf("%d",&e); 
int ar[e]; 

這是動態分配?它看起來像是我可以在運行時分配內存。

我用它從用戶獲取輸入的元素數量,然後再由用戶填充它。

+7

C或C++?選擇一個。 –

+4

根據C++標準,你的代碼是不合格的,但在C99中是合法的。這兩種語言*非常*不同。 – kfsone

回答

5

這不是正好是動態內存分配,正如通常所理解的術語。

這叫做variable length array。數組的大小在運行時是已知的,因此在運行時分配內存。然而,與動態內存分配庫函數(malloc()/calloc())不同,底層內存分配是依賴於編譯器的。例如,gcc分配堆棧中的VLA。因此,這種方法的主要區別(與動態內存分配相比)是,VLA駐留在自動存儲器中。一旦你離開示波器,它將不再可用。引用C11,章第6.2.4節

對於這樣的對象,它具有可變長度數組類型,它的壽命從 直到程序的執行離開 聲明的範圍擴展的對象的聲明。 [...]

FWIW,這是在C99標準中引入的,只有在C11中才可選。

而AFAIK,C++不支持這個作爲標準的組成部分,它可能是一個編譯器擴展。

0

雖然內存在這種情況下,在運行時分配的,它是不完全動態內存分配。請記住,動態分配的內存應該在其使用後釋放/釋放。

這應該是這樣的(C)中

int e; 
scanf("%d", &e); 
/*dynamically allocate memory using malloc function*/ 
int* ar = (int*) malloc(e * sizeof(int)); 
... 
... 
... 
/* release memory using free() function */ 
free(ar);