試圖分配一個由N個元素組成的char數組。動態字符數組
#include <stdio.h>
#include <malloc.h>
int main()
{
int N = 2;
char *array = malloc(N * sizeof(char));
array[0] = 'a';
array[1] = 'b';
array[2] = 'c'; // why can i do that??
printf("%c", array[0]);
printf("%c", array[1]);
printf("%c", array[2]); //shouldn't I get a seg fault here??
return 0;
}
的問題是:
由於我分配2 * 1 = 2個字節的存儲器,這意味着,我可以在我的陣列2個字符。我怎麼可能有更多?我還打印sizeof(*數組),它打印8個字節。我在這裏錯過了什麼?
這是*未定義的行爲*。高興你的貓沒有着火。 – Zeta 2015-02-24 18:33:19
如果你經過數組的末尾(這是未定義的行爲),C並不在乎。只要這個內存存在,它就會有*機會*,這取決於你的編譯器,操作系統和其他東西。然而,你的編譯器應該給你一個警告。 – Jon 2015-02-24 18:34:27
'sizeof(* array)'應該是1,而不是8.也許你打印了'sizeof(array)',它給出了一個指針的大小。 – interjay 2015-02-24 18:34:40