2014-03-05 33 views
0

創建的數組時,此中止(核心轉儲)時在Cygwin作爲<code>./test.exe</code>運行釋放用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 

產生輸出Aborted (core dumped)

當我聲明int *arr(即使保留(double *)強制轉換),或者當我更新arr[0]而不是arr[i]時,程序退出正常。是什麼賦予了?

+1

大聲笑感謝所有downvotes。顯然我不應該在遇到愚蠢的東西時轉向SO:P – wrongusername

回答

6

變化

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

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

UPDATE:

sizeof(double)sizeof(pointer)取決於架構。在你的情況下,他們是不同的。

+0

我也想這樣說,但它仍然很有趣,爲什麼這會變得非常錯誤,sizeof(雙指針)!= sizeof(double)? – Gabriel

+1

啊,是的,或者'sizeof(* arr)'...錯過了該死的星號! – wrongusername

+0

@Gabriel指針可能不是雙倍大小。不管他們指的是什麼,指針的大小總是相同的(並且取決於體系結構) – zoska