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

释放用calloc创建的数组时中止(内核转储),c,free,calloc,C,Free,Calloc,这个 在Cygwin上以/test.exe运行时,生成输出中止(堆芯转储) 当我声明int*arr(即使保持(双*)强制转换),或者当我更新arr[0]而不是arr[I]时,程序正常退出。什么带来了变化 gcc test.c -std=c99 -o test 到 更新: sizeof(double)和sizeof(指针)取决于体系结构。在你的情况下,它们是不同的。改变 gcc test.c -std=c99 -o test 到 更新: sizeof(double)和sizeof(指针)取决于

这个

在Cygwin上以
/test.exe
运行时,生成输出
中止(堆芯转储)

当我声明
int*arr
(即使保持
(双*)
强制转换),或者当我更新
arr[0]
而不是
arr[I]
时,程序正常退出。什么带来了变化

gcc test.c -std=c99 -o test

更新:

sizeof(double)
sizeof(指针)
取决于体系结构。在你的情况下,它们是不同的。

改变

gcc test.c -std=c99 -o test

更新:


sizeof(double)
sizeof(指针)
取决于体系结构。在您的情况下,它们是不同的。

我也想说这一点,但有趣的是,为什么会出现如此错误,sizeof(双指针)!=sizeof(双倍)?啊,是的,那个,或者
sizeof(*arr)
。。。错过了该死的星号@加布里埃尔指针的大小可能不是两倍。不管它们指向什么,指针的大小总是相同的(并且取决于架构)@username如果您接受answer@MattMcNabb那么,
void*
如何在这个系统上工作呢?我也想这么说,但仍然很有趣的是,为什么会出现这样的错误,sizeof(双指针)!=sizeof(双倍)?啊,是的,那个,或者
sizeof(*arr)
。。。错过了该死的星号@加布里埃尔指针的大小可能不是两倍。不管它们指向什么,指针的大小总是相同的(并且取决于架构)@username如果您接受answer@MattMcNabb那么
void*
在这个系统上是如何工作的呢?哈哈,谢谢所有的反对票。显然,当我被一些愚蠢的事情难倒时,我不应该这样说:谢谢所有的反对票。显然,当我被一些愚蠢的事情难倒时,我不应该这么做:P
double *arr = (double*) calloc(1000, sizeof(arr));
double *arr = (double*) calloc(1000, sizeof(double));