我创建了一个二维字符数组。对于我分配的每个arr [0],我为其分配一个列“ arr [0] [0],arr [1] [0],...”。但是,我可以访问的内存比为每个列分配的内存更多。我可以访问arr [0] [1],arr [0] [2],... 根据了解,除非我为其分配内存,否则我将无法访问arr [0] [1]。
我加入了一些注释,这些注释代表我对代码的理解
-PdeleteAll=true
我相信我应该可以分配
char ** sArr = malloc(sizeof(char*)); // create sArr[0]
sArr[0] = malloc(sizeof(char*)); // create sArr[0][0]
sArr[0][0] = 'a';
sArr[0][1] = 'b';
sArr[0][2] = 'c';
printf("%c\n", sArr[0][0]); // outputs 'a' as expected
printf("%c\n", sArr[0][1]); // outputs 'b', expected error or garbage
printf("%c\n", sArr[0][2]); // outputs 'c', expected error or garbage
仅在我使用过
sArr[0][1]='b'
答案 0 :(得分:1)
您为sizeof(char *)
(一个字符指针)分配了空间。指针的大小可能是四个或八个字节,具体取决于您的系统。如果您改为为sizeof(char)
(一个字节)分配空间,并尝试访问数组末尾以外的地方,则会调用undefined behavior(不好的主意)。