2012-04-24 14 views
1

構造体の変数をファイルに出力しようとすると、セグメント化エラーが発生します。最初にコードを書いたときに、結果が画面に表示されましたが、最後に表示されるセグメンテーション違反を除いて問題なく表示されました。セグメンテーションエラーと構造体変数がファイルに出力されない

しかし、私がコードを変更してファイルを作成するとファイルが作成されますが、ファイルは空で、segmentation faultが画面に印刷されます。

アドバイスはありますか?

/* all is an array of struct CASE, 
    artall is an array of struct ARTCOUNT, 
    pLast is last element in all */ 

void printArtCount (CASE* all, ARTCOUNT* artAll, CASE* pLast) 
{ 
    ARTCOUNT* artWalker = artAll; 
    CASE* walker; 
    char input[51]; 
    FILE* spOut; 

    printf("File name for artist count output: "); 
    scanf("%50s", input); 
    spOut = fopen(input, "w"); 

    while(artWalker->name) 
    { 
    fprintf(spOut, "%d ", artWalker->count); 
    fprintf(spOut, "%s\n", artWalker->name); 
    for(walker = all; walker <= pLast; walker++) 
    { 
     if (strcmp(walker->name, artWalker->name) == 0) 
     fputs(walker->art, spOut); 
    } 
    artWalker++; 
    } 

return; 
} 

編集:セグメント化エラーが表示されなくなるようにコードを修正しました。 EVerythingは現在動作しています。

ありがとうございました。

+0

どのように 'while'ループが動作すると思いますか?初期化されていないメモリへのポインタを間接参照するとどうなりますか?あなたは "未定義の振る舞い"について聞いたことがありますか? – Beta

+0

@cnicutar: 'artWalker'はポインタです。ヌルになるまでそれをインクリメントしますか? – Beta

+0

@Beta Yup、そうです。 OPは 'while(* artWalker)'を意味すると私は思う。 – cnicutar

答えて

1

あなたは、その限界からアレイを読んでいるかもしれません。

以下の方法で配列要素をループしてみてください。

len = sizeof(artWalker)/sizeof(artWalker[0]); 

for (i=0; i<len ; i++) { 
    ... 
    artWalker[i]->struct_member; 
    ... 
} 
+0

いいえ、artWalkerは配列ではなくポインタです。あなたのsizeof部門は理にかなっていません。 –

+0

私は問題が何であるかを理解しました。 walker-> nameがちょうど歩行者の代わりにヌルでないことを確認していることを確認しなければならなかった。 – Huy

関連する問題