我期望以下代码段使用来为五个成员分配内存calloc。
$ cat calloc.c
// C program to demonstrate the use of calloc()
// and malloc()
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *arr;
arr = (int *)calloc(5, sizeof(int));
printf("%x\n", *arr);
printf("%x\n", *(arr+1));
printf("%x\n", *(arr+2));
printf("%x\n", *(arr+3));
printf("%x\n", *(arr+4));
printf("%x\n", *(arr+5));
printf("%x\n", *(arr+6));
// Deallocates memory previously allocated by calloc() function
free(arr);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
但是它似乎分配了五个以上的空间。它分配了六个成员,为什么呢?
./a.out
0
0
0
0
0
0
411
Run Code Online (Sandbox Code Playgroud)
分配内存并不像购买棒棒糖。分配内存更像是购买土地。
如果您购买五个棒棒糖,然后尝试吃第六个棒棒糖,那么这显然是行不通的。但是,如果您购买了一块10英尺乘50英尺的土地,然后开始建造10x10英尺的建筑物,并且在其中五座建筑物(完全占据了您的土地)建成之后,您建造了第六座建筑物,侵占了您邻居的土地,您的邻居可能不会立即注意到,所以您可能会摆脱它。(不管怎么说,最后一定会有麻烦。)