2016-12-19 4 views
0
static void fill_array(int arr[], int count, int num) 
{ 
    int i; 
    for(i=0; i<count; i++) 
    { 
     arr[i] = num; 
    }  
} 

typedef struct 
{ 
    int a[10]; 
} x; 

int main(void) { 
    x *x1; 
    fill_array(x1->a, 10, 0); 
} 

これを試しているうちに、ランタイムエラーが発生しています。誰でもこの問題を助けることができますか? ありがとうございます。Cで機能する構造体メンバ配列を渡す

答えて

1

xのメモリを割り当てていない:プログラムの動作がで、定義されていないです。この例では

、あなたは

x x1; 
fill_array(x1.a, 10, 0); 

すなわちxの自動記憶域期間を使用して逃げることができました。これは、fill_arrayに渡されたときにx1.aが効果的にポインタに崩壊するためです。

1

x1にメモリを割り当てていません。あなたのランタイムエラーは、おそらく私がx *x1;

WICHが割り当てられていない、あなたはとても非割り当てられたpointeurのコンテンツにアクセスしようとしているあなたの最初のpointeurを見ることができますsegmentation fault

でなければなりません

int main(void) { 
    x *x1 = malloc(sizeof(x)); 

    if(0 !=x1) 
    { 
     fill_array(x1->a, 10, 0); 
     free(x1); 
    } 
} 
+0

'malloc'の戻り値を確認していただきありがとうございます。 upvoteをしてください。 – Bathsheba

+0

あなたは 'x'と' x1'を一貫して使用していません – artm

+0

'free(x)'が間違っています – artm

-1

... segfault。

2つの解決策があります。 構造体をローカルメモリで宣言するx x1; または

+0

実行時エラーは何でもかまいません。ポインタ自体は割り当てられていますが、初期化されていません。 –

関連する問題