Wenn ich versuche, fopen() in C aufzurufen, erhalte ich den Segmentierungsfehler nur bei Aufrufen mit einer Datei im Verzeichnis. Ich arbeite an einem Projekt, das einen Fingerabdrucksensor verwendet, den Fingerabdruck in einer Datei registriert und dann die Datei liest, um sie mit einem Fingerabdruck zu vergleichen, der zur Laufzeit gelesen wird.fopen() verursacht Segmentierungsfehler beim Aufruf einer vorhandenen Datei
Hier ist der Kern des Codes.
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);
Das Merkwürdige ist, dass die folgenden funktioniert perfekt ...
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);
was seltsam ist, ist, dass ich frei die gleiche Datei erstellt öffnen kann, aber wenn ich ändern, um die Datei in einem anderen Datei, die von einer älteren Instanz dieser Datei erstellt wurde, erhalte ich den Fehler.
Sie rufen undefiniertes Verhalten an anderer Stelle in Ihrem Code auf. Führen Sie es unter [valgrind] (http://valgrind.org) aus, damit Sie herausfinden können, wo. – dbush
Wenn es bei einem Standard-Aufruf von 'fopen()' abstürzt, haben Sie wahrscheinlich den Stapel vor dem Aufruf beschädigt. – Olipro
Warum bist du dir so sicher, dass das 'fopen'call Programm abstürzt? Sie möchten Ihren Code mit einem Debugger ausführen, um die Zeile genau zu bestimmen, in der das Programm abstürzt. – alk