此
#include <stdlib.h> // test.c
int main()
{
double *arr = (double*) calloc(1000, sizeof(arr));
for (int i = 0; i < 1000; i++)
arr[i] = 1;
free(arr);
return 0;
}
编译为
gcc test.c -std=c99 -o test
在Cygwin上以Aborted (core dumped)
运行时生成输出./test.exe
。
当我声明int *arr
时(即使在保持(double *)
演员表时),或者我更新arr[0]
而不是arr[i]
时,程序退出正常。是什么给了什么?
答案 0 :(得分:6)
更改
double *arr = (double*) calloc(1000, sizeof(arr));
到
double *arr = (double*) calloc(1000, sizeof(double));
更新:
sizeof(double)
和sizeof(pointer)
取决于架构。在你的情况下,他们是不同的。