2017-03-30 103 views
0

我想知道c中的數組是如何工作的。所以我正在實現一些基本的數組概念。當我運行程序時,我得到了確切的輸出,但在輸出結束時它說分段錯誤打印輸出時出現分段錯誤

int main(void) 
{ 
    int a[] = {}; 
    printf("Enter the number:"); 
    int n = get_int(); 
    int m = 0; 

    for(int i = 0; i<n; i++) 
    { 
     printf("insert:"); 
     m = get_int(); 
     a[i] = m; 
    } 

    for(int j = 0; j < n; j++) 
    { 
     printf("%d\n", a[j]); 
    } 

} 

輸出:

Enter the number:3 
insert:1 
insert:2 
insert:3 
1 
2 
3 
~/workspace/ $ ./arr_test 
Enter the number:5 
insert:1 
insert:2 
insert:3 
insert:4 
insert:5 
1 
2 
3 
4 
5 
Segmentation fault 

看到它的尺寸爲3它並不顯示segmentation fault第一輸出但對於第二個具有的尺寸爲5它顯示。所以爲什麼會發生這種情況,我犯了什麼錯誤

+0

int a [] = {};'是標準C中的錯誤。我建議在標準兼容模式下操作您的編譯器,以免在編譯時而不是運行時出錯。 –

回答

3

您需要爲陣列分配內存。喜歡的東西:

int main(void) { 
    int *a; 
    ... 
    int n = get_int(); 
    ... 
    a = malloc(n * sizeof(int)); 
    if (!a) { 
     // Add error handling here 
    } 
    ... 
} 
+0

或者只是'int a [n];'在讀完之後n – immibis

1

如果你知道你想提前數組的大小,宣佈它像int a[128];,而不是僅僅int a[];所以a在指數0127將是安全的寫(以及隨後讀取)。

如果要在運行時聲明大小爲n的數組,請使用int a[] = malloc(n * sizeof(int));int *a = malloc(n * sizeof(int));。在使用它之前,請確保a不是NULL,並且請記住在完成此操作後請致電free(a);以避免內存泄漏。

+0

我現在把a的大小分配到了128位,但是它沒有顯示出'段錯誤'。但我如何讓'a'分配它自己的大小。 – pkarthicbz

+0

您沒有分配128 *位*的大小。您分配了128 * 4字節。 –