【发布时间】:2020-01-15 18:21:07
【问题描述】:
我期望下面的 sn-p 使用 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);
}
但是好像分配的不止五个;它分配了六个成员,为什么?
./a.out
0
0
0
0
0
0
411
【问题讨论】:
-
访问对象边界之外的数据是未定义的行为。不要依赖它。
-
它可能分配了一个最小大小。但是您可以访问 5 元素 - 您分配的内容。如果您认为第六个元素是您的,那么您的代码没有证明。可能是duplicate question。
-
旁注:如果您厌倦了输入
*(arr+3)之类的内容,您可以使用arr[3]。它是 100% 完全等效的。