Calloc在C中分配多少个成员

Mil*_*lan 0 c linux

我期望以下代码段使用来为五个成员分配内存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)

Ste*_*mit 5

分配内存并不像购买棒棒糖。分配内存更像是购买土地。

如果您购买五个棒棒糖,然后尝试吃第六个棒棒糖,那么这显然是行不通的。但是,如果您购买了一块10英尺乘50英尺的土地,然后开始建造10x10英尺的建筑物,并且在其中五座建筑物(完全占据了您的土地)建成之后,您建造了第六座建筑物,侵占了您邻居的土地,您的邻居可能不会立即注意到,所以您可能会摆脱它。(不管怎么说,最后一定会有麻烦。)