2013-11-03 80 views
0

如果你想的int size動態分配的數組,有兩種方式可以得到,在C:數組vs malloc?

int* array = new int [size]; //method 1 
int* array2 = malloc (sizeof(int) * size); //method 2 

什麼時候應該使用哪種方法?

+4

選擇一種語言。這個問題對於當前的一組標籤來說很荒謬。 –

+0

總是使用第二個..爲什麼這是一個困境..選擇第二個並堅持下去 – sukhvir

+1

幾乎從不使用。 – chris

回答

1

另一種選擇,如果陣列不會是大是分配它在堆棧上作爲VLA

int array[size]; 

當變量離開範圍,其可能或可能這將自動釋放內存不是你想要的。如果您打算在其分配的功能之外使用該變量,請使用malloc方式。

3

如果你在C,第二個。

如果您使用C++,如果可以的話,請使用std::vector<int>;否則使用第一個(很少需要)。

+0

你能再詳述一下嗎? – canhazbits

+0

使用'new'之前,應該考慮智能指針('make_unique/shared')。只有當他們失敗時(他們是否曾經???)應該考慮手動管理內存。但是,當然,即使在智能指針之前,標準容器也覆蓋了大部分情況。 – syam

+0

我爲什麼要用C中的第二個? – dfg

0

另一種選擇(尤其是當存儲器需要被歸零):

int *array3 = calloc(size, sizeof array3[0]); 

這可以防止溢出(其必須在size * sizeof array[0]手動進行檢查)。