-2
Cでfopen()を呼び出そうとすると、ディレクトリ内のファイルを持つ呼び出しでのみセグメント化エラーが発生します。私は指紋センサーを使用し、ファイルに指紋を登録し、実行時に読み取られている指紋と比較するためにファイルを読み取るプロジェクトに取り組んでいます。既存のファイルで呼び出されたときにfopen()がセグメンテーション違反を起こす
コードの要点は次のとおりです。
FILE * file;
// right_thumb.bin is located in the same directory as the file.
// right_thumb.bin is created using fwrite.
file = fopen("right_thumb.bin", "rb");
// program crashes right at the line above, with the segmentation fault error.
ABS_BIR * readImage;
fread(&readImage, sizeof(ABS_BIR), sizeof(&var), file);
// &var is a pointer to the fingerprint that was written
// ABS_BIR is the fingerprint data type
fclose(file);
奇妙なことは、どのような奇妙ですが、私は自由に作成し、同じファイルを開くことができますが、私は別のにファイルを変更した場合ということです...次は完璧に動作することを、
File * file;
file = fopen("right_thumb.bin", "w");
fwrite(&var, sizeof(ABS_BIR)/*size of the type the fingerprint is stored in*/
, sizeof(&var)/*8*/, file);
fclose(file);
file = fopen("right_thumb.bin", "rb");
fread(&readImage, sizeof(ABS_BIR), sizeof(&var), file);
ですこのファイルの古いインスタンスによって作成されたファイルでは、エラーが発生します。
にサイズ
sizeof(ABS_BIR)
の一つのバッファを読んで書いているように私は1
にsizeof(&var)
のインスタンスを変更注意コード内のどこかで未定義のビヘイビアを呼び出しています。それを[valgrind](http://valgrind.org)の下で実行すると、どこにあるかを知ることができます。 – dbush
標準の 'fopen()'呼び出しでクラッシュすると、スタックを呼び出す前にスタックが破損している可能性があります。 – Olipro
「fopen」コールがあなたのプログラムをクラッシュさせているのはなぜなのですか?デバッガを使用してコードを実行して、プログラムがクラッシュする行を正確に特定したいとします。 – alk