2014-07-09 74 views
0

我正在編寫一個程序,突然產生了疑問。 我有兩種方法分配靜態數組。簡單的數組內存分配與大小動態分配和預定的大小

int main() 
{ 
    int a[10]; 
} 
int main() 
{ 
    int N; 
    cin >> N; //assume i input N as 10 
    int a[N]; 
} 

在這兩種情況下內存分配如何不同? 將在運行時在第二種情況下分配嗎?

+0

第二個版本在標準C++中是不允許的。 – juanchopanza

+0

或標準C,就此而言 –

+2

可能被認爲是[Does「int size = 10;」會產生一個常量表達式?](http://stackoverflow.com/questions/21273829/does-int-size-10 -yield-a-constant-expression/21273849#21273849),簡短摘要變長數組是有效的C99,但不是有效的C++,但它作爲C++中的一個擴展而被幾個編譯器支持。 –

回答

0

第二個是編譯的。但這是錯誤的。標準C/C++不允許它。

2

第二種方式是不允許的。第一種方法是在堆棧上創建內存。一旦main()退出,它將被解除分配。如果你想動態分配最好的方式是使用新的:

int* = new int[N]; 

但是這樣你就不得不刪除它,最後。如果你使用STL,那麼只需要使用std :: vector:

std::vector<int> a;