2011-11-29 77 views
0

我需要動態分配大小爲12MB的int類型的數組。我做到了,如下所示:迭代動態分配的數組

unsigned int *memory; 
memory = (int *) malloc(3072 * sizeof(int)); 

我將如何通過數組迭代,而不必使用3072?有沒有辦法獲得數組的長度?或者我應該只做for (int i = 0; i < 3072; i++)

謝謝

+2

可能重複http://stackoverflow.com/問題/ 492384/how-to-find-the-sizeof-a-pointer-pointing-of-an-array) –

回答

3

這是沒有便攜或方便的方式來找出多大的分配塊。在malloc完成後,所有可見的內容都是指向不確定數量內存(*)的指針。你必須自己做記賬。


(*)其實malloc和朋友知道塊有多大,但有一個客戶端訪問這些信息的標準方法。

1

C中的指針沒有固有的長度,因此沒有辦法做到這一點。您必須在整個使用期限內保持與指針配對的長度。

+1

數組的長度可以計算爲sizeof(a)/ sizeof(* a)',a *指針*,雖然是不同的。 –

+0

@BlagovestBuyukliev謝謝,更新了答案 – JaredPar

0

沒有其他辦法。您應該將3072放在const int中,這會使代碼更好,更易於維護。

0

隨着MSVC和MinGW您可以使用不可移植_msize功能,如

char *c=malloc(1234); 
printf("%lu",(unsigned long)_msize(c)); 
free(c); 
[如何找到的sizeof(一個指針指向數組)](的