2017-03-30 17 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 

それはsegmentation faultを示すが、それは示し5の大きさを有する第2のいずれかにない3のサイズを有する第一の出力を参照されたいです。それがどうして起こったのか、私は何の間違いをしましたか。

+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];'を読み込んだ後に、 – immibis

1

あなたは、配列のサイズを知っている場合は、前もって作りたい、インデックス1270int a[128];だけではなくint a[];のでaようにそれを宣言するに書き込むのが安全でしょう(とその後から読んでください)。

実行時にサイズnの配列を宣言する場合は、int a[] = malloc(n * sizeof(int));またはint *a = malloc(n * sizeof(int));を使用します。使用する前にaNULLでないことを確認し、メモリリークを防ぐために完了したらfree(a);に電話することを忘れないでください。

+0

のサイズを128ビットに割り当てましたが、 'segmentation fault'は表示されません。しかし、私はそれを自分のサイズに割り当てるために 'a'をどうやって作るのですか? – pkarthicbz

+0

128 *ビット*のサイズを割り当てていません。あなたは128 * 4バイトを割り当てました。 –

関連する問題