释放使用calloc创建的数组时中止(核心转储)

时间:2014-03-05 09:44:49

标签: c free calloc

#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]时,程序退出正常。是什么给了什么?

1 个答案:

答案 0 :(得分:6)

更改

double *arr = (double*) calloc(1000, sizeof(arr));

double *arr = (double*) calloc(1000, sizeof(double));

更新:

sizeof(double)sizeof(pointer)取决于架构。在你的情况下,他们是不同的。