2D动态分配的数组,其访问的内存多于分配的大小

时间:2019-02-08 22:49:47

标签: c dynamic-memory-allocation

我创建了一个二维字符数组。对于我分配的每个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' 

1 个答案:

答案 0 :(得分:1)

您为sizeof(char *)(一个字符指针)分配了空间。指针的大小可能是四个或八个字节,具体取决于您的系统。如果您改为为sizeof(char)(一个字节)分配空间,并尝试访问数组末尾以外的地方,则会调用undefined behavior(不好的主意)。