试图分配一个由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