2014-10-30 38 views
1

的malloc我已用malloc使用以下行的代碼創建的陣列創建的整數數組的大小這返回2,但不是12(我知道sizeof(數組[0]更一般)。 混淆(對我來說),當我創建一個數組時使用正確獲得與用c

int array[12] 

的上面一行代碼返回正確的尺寸:12

此外,我能夠填充12點的整數中的int *陣列未經分段錯誤,我不理解如果尺寸原來是2.

有人可以告訴我我在做什麼錯誤/ 如何獲得在c中使用malloc初始化的數組大小?

對不起,如果這是基本的,我環顧四周,找不到答案。

謝謝你的時間。

+6

[不投的malloc(朋友)的結果] (http://stackoverflow.com/q/605845)。 – Deduplicator 2014-10-30 15:54:35

+4

第一個'array'不是一個數組,而是一個指向'int'類型元素的指針。第二個是! – Deduplicator 2014-10-30 15:55:11

+3

這裏有更多的可能是重複的地方,但一般的答案是'sizeof(array)'在第一種情況下給你指針的大小,*不是*數組的大小;沒有辦法從一個指針來確定數組的大小。 – 2014-10-30 15:56:10

回答

1
int *arr = malloc(sizeof(int)); 

無需投射malloc()。 arr是一個指針,以便在第一種情況下正在使用的

sizeof(arr) 

它給你指針的大小不是數組的大小。

在第二種情況下,你有一個陣列

int arr[12]; 

在這裏,你得到你的陣列arr這是大小

sizeof(arr)/sizeof(int)