2012-01-23 11 views
1

私はこのような構造アクセス違反実行時エラーが発生するのはなぜですか?

typedef struct fpinfo 
{ 
    unsigned long chunk_offset; 
    unsigned long chunk_length; 
    unsigned char *fing_print; 
}fpinfo; 

typedef struct Hash_Entry { 
    struct Hash_Entry *next; /* Link entries within same bucket. */ 
    unsigned namehash;  /* hash value of key */ 
    struct fpinfo fp; 
} Hash_Entry; 

を持っている。ここでfing_print配列から

unsigned int h; 
h = (he.fp.fing_print[0] << 2 | (he.fp.fing_print[1] & 0xC0) >> 6) & 0x3FF; 

を10 MSBを抽出するために、次のコード行は、私は、ファイルの内容を読み取ることによって、彼のデータメンバを初期化する方法であります

while(fscanf(rd,"%ul,%ul,%X",&test_st.fp.chunk_offset,&test_st.fp.chunk_length,&test_st.fp.fing_print) !=EOF) 
{ 
    .... 
} 

VC 2010は、エラーを与える:

htable.exeの0x013217f8の処理されない例外:0xC0000005:0xCCccccccの読み取りアクセス違反。

何が問題なのですか?

+0

ファイルからポインタ値を読み取ろうとしています。それはうまくいかないでしょう。あなたは文字列を読む必要があります。それを読む前に、test_st.fp.fing_printがmalloc()で初期化されていることを確認してください。 –

答えて

1

最も可能性の高い理由は、he.fp.fing_printが初期化されていないため、要素にアクセスしようとするとプロセスがクラッシュするためです。確認するには、ポインタの値を表示するか、デバッガで調べます。

  1. それは意図が何であるかは全く明らかではないが、&test_st.fp.fing_printと一緒%Xポインタを上書き;:

    編集 2つのfscanf()コードに問題があります。

  2. test_st.fp.fing_printのメモリを割り当てていないようです。
+0

私の編集を参照してください – John

+0

@ジョン:私は私の答えを編集しました。 – NPE

+0

ファイルからチャンクオフセット情報を読み取ろうとしていますが、このオフセット情報をチャンクフィンガープリントの計算に使用し、この最終情報をハッシュテーブルに入れなければなりません。しかし、私がすべてを行う前に、ファイルからオフセットを読み込み、ハッシュテーブルに入れようとしています。 – John

0

可能性のある理由は、test_stが初期化されておらず、fpを初期化するために使用している可能性があります。

+0

どうすれば初期化できますか? – John

+1

test_stを宣言した部分を特別なコードにすることができれば幸いです。 – rakesh

関連する問題