2012-02-28 14 views
0

私はstruct fpinfo *estruct fpinfo e;を変更した場合、私は、実行時エラーを取得なぜ変数を取得するのですか?初期化されていないエラーなしで使用されていますか?

を、私は、ファイル にハッシュテーブルを書くためにこのプログラムを使用したいが、私は、コンパイル時に

cannot convert parameter 1 from 'fpinfo' to 'const void *'

エラーが表示されます。

The variable 'e' is being used without being initialized.

struct fpinfo *e=NULL;と宣言してeを初期化しようとしました。これは動作しません。

いつものように私に助けてください。

WriteHTtoFile(struct fpinfo t[][B_ENTRIES],int this_tanker,tanker_record tr[][BUCKETS]) 
{ 
    //struct fpinfo *e; 
    struct fpinfo e; 
    int i=0, mask; 
    char filename[sizeof ("file0000.txt")]; 
    sprintf(filename, "filee%d.txt", this_tanker); 
    curr_tanker++; 
    //fp = fopen(filename,"w"); 
    FILE *htfile=fopen(filename,"w+b"); 
    system("cls"); 
if (htfile != NULL) 
     { 
     for (int j = 0; j < BUCKETS; ++j) 
     { 
      for (int k = 0; k < tr[this_tanker][j].bkt.num_of_entries; ++k) 
      { 
      printf("%d\t%d\t%s\n",t[j][k].chunk_offset,t[j][k].chunk_length,t[j][k].fing_print); 
      (e).chunk_offset=t[j][k].chunk_offset; 
      (e).chunk_length=t[j][k].chunk_length; 
      strcpy((char*)((e).fing_print),(char*)t[j][k].fing_print); 
      fwrite(e,sizeof(fpinfo),1,htfile); 
      } 
     } 
      fclose(htfile); 
     } 
     else 
     { 
      std::cout<<"File could not be opend for writing"; 
      printf("Error %d\t\n%s", errno,strerror(errno)); 
     } 

    fclose(htfile); 
    return 1; 
} 
+0

これはCではなく、C.固定タグです。 –

+0

ファイルはどのような形式になっていますか? 'e'をファイルがどのようなフォーマットになっているのかに変換するためのコードが不足しているようです。メモリの内容をファイルに書き込むことはできませんし、それらの内容は既知の形式で保存されます。 –

+0

@DavidSchwartzそれはバイナリファイルであり、皆さんのおかげでそれを書いて読んでいます。 – John

答えて

3

fwrite()の最初の引数はconst void*です。これはstruct fpinfo渡し:

fwrite(e, sizeof(fpinfo), 1, htfile); 

変更するには:

fwrite(&e, sizeof(fpinfo), 1, htfile); 

私はstruct fpinfoのメンバーはそう、これは(例えば、それは任意のポインタメンバーが含まれている場合)、安全でない可能性があるが何であるかわかりませんよ。 struct fpinfoのメンバーの今後の並べ替えや、新しいメンバーが追加されたようなstruct fpinfoのサイズの増加をもたらす変更は、以前に書かれたstruct fpinfoデータを読み取る試みが間違っていることを意味します。

eの宣言がstruct fpinfo* e;にunitialisedエラーを変更したポインタがNULLであること、または動的struct fpinfoが割り当てに割り当てられていないためでした。

struct fpinfo *e = NULL;に変更すると、eのメンバーにアクセスしようとすると、struct fpinfoを指していないため、セグメンテーション違反が発生します。

関連する問題