У меня возникают некоторые проблемы при попытке прочитать двоичный файл в C. Эта проблема никогда не случалась со мной раньше, я не знаю, как ее управлять.Ошибка сегментации при чтении двоичного файла в структуру
Итак, есть такая структура, называемая «hash_record», многие из них хранятся в моем файле «HASH_FILE» в двоичном режиме. Это структура:
typedef struct hash_record {
char *hash;
char *filename;
} hash_record;
Я пишу этот файл следующим образом:
hash_record hrec;
[...] code that fill the structure's fields [...]
FILE* hash_file = fopen(HASH_FILE, "ab");
fwrite(&hrec, sizeof(hash_record), 1, hash_file);
fclose(shared_file);
Это только резюме, то FWRITE() функция внутри цикла, так что я могу заполнить файл многие hash_record's. Затем, сразу после этого фрагмента кода, я начинаю читать файл и печатать некоторые данные, чтобы убедиться, что все прошло хорошо. Это код:
И все работает отлично! Проблема заключается в том, что если я напишу двоичный файл в экземпляре своей программы, а затем выйду из него, когда я его снова открою (комментируя код, который записывает файл, чтобы он мог его только читать), он дает мне ошибку сегментации. Эта ошибка появляется, когда я вызываю printf() внутри цикла while(). Если я просто напечатаю общую строку без вызова «rec», никаких ошибок не будет, поэтому я предполагаю, что что-то неправильно хранит данные внутри «rec».
Любая идея?
Спасибо!
Вы не можете сериализовать 'char *', по крайней мере, не так, как вы думаете. Вам нужно сделать сериализацию должным образом, что выходит за рамки комментария. –
Я предполагаю, что вызов 'fread' не хранит ничего в' rec', поэтому printf терпит неудачу. Используйте отладчик, чтобы убедиться, что 'rec' не является нулевым. – prelic
Нам понадобится дополнительная информация, которая вам поможет. Некоторые особенности структуры данных, которые вы пишете. В частности, содержит ли структура адреса? Если это так, адрес в программе записи не имеет отношения к программе чтения; вы должны восстановить адрес. Однако то, что вы показываете, не говорит нам, в чем проблема. –