我需要動態分配大小爲12MB的int
類型的數組。我做到了,如下所示:迭代動態分配的數組
unsigned int *memory;
memory = (int *) malloc(3072 * sizeof(int));
我將如何通過數組迭代,而不必使用3072
?有沒有辦法獲得數組的長度?或者我應該只做for (int i = 0; i < 3072; i++)
?
謝謝
我需要動態分配大小爲12MB的int
類型的數組。我做到了,如下所示:迭代動態分配的數組
unsigned int *memory;
memory = (int *) malloc(3072 * sizeof(int));
我將如何通過數組迭代,而不必使用3072
?有沒有辦法獲得數組的長度?或者我應該只做for (int i = 0; i < 3072; i++)
?
謝謝
這是沒有便攜或方便的方式來找出多大的分配塊。在malloc
完成後,所有可見的內容都是指向不確定數量內存(*)的指針。你必須自己做記賬。
(*)其實malloc
和朋友做知道塊有多大,但有一個客戶端訪問這些信息的標準方法。
C中的指針沒有固有的長度,因此沒有辦法做到這一點。您必須在整個使用期限內保持與指針配對的長度。
數組的長度可以計算爲sizeof(a)/ sizeof(* a)',a *指針*,雖然是不同的。 –
@BlagovestBuyukliev謝謝,更新了答案 – JaredPar
沒有其他辦法。您應該將3072放在const int中,這會使代碼更好,更易於維護。
隨着MSVC和MinGW您可以使用不可移植_msize功能,如
char *c=malloc(1234);
printf("%lu",(unsigned long)_msize(c));
free(c);
[如何找到的sizeof(一個指針指向數組)](的
可能重複http://stackoverflow.com/問題/ 492384/how-to-find-the-sizeof-a-pointer-pointing-of-an-array) –