Это сводит меня с ума, поэтому любая помощь будет оценена.
Я занимаюсь разработкой программы, которая сканирует точки доступа Wi-Fi и управляет ими с различными функциями.Один из них - сохранить список точек доступа в файл, другой - прочитать точки доступа из файла и добавить их в текущий список.Точки доступа хранятся в связанном списке, где «p» содержит информацию об одной точке доступа (mac, mode, encrypted, essid и т. Д.), А «next» - указатель на следующий узел.
Вот часть функции, которую я использую для сохранения:
void store_info_in_file(list l)
{
list aux;
aux = l;
FILE *file;
..
..
//After opening the file with a name chosen by the user,it traverses
//the list and with casts to char, saves each part of each access point.
//Conversion to char to ease storage in a binary file.
char essid_len = (char)strlen((aux->p).essid);
char enc = (char)(aux->p).encrypted; //originally an int
fwrite(&essid_len,1,1,file);//i'm guessing the size is sizeof(char) now
И то же самое для всех частей.Анализируя вывод файла с помощью шестнадцатеричного редактора, я вижу, что данные были сохранены правильно.
Это проблематичная часть функции чтения: (я читаю первый символ [количество точек доступа, содержащихся вфайл] и сохраните его для последующего преобразования в int).
//new_apns is for later use, when i will fread the rest of the file at once.
char new_apns;
////wifi_collector_list.c:1103
fread(&new_apns,1,1,fp);
Это вызывает ошибку сегментации из-за неверного чтения размера 4. Вот вывод для:
"valgrind --leak-check = full --show-достижимый = yes --track-originins = yes ./app"
http://pastebin.com/LAwsCV11
Редактировать: Я определенно глуп, я написал:
fp = fopen(string,"rb");
if(fp != NULL)
{
//fread here
}
И почему-то изменил его на:
if(fopen(string,"rb"))
{
//fread here, so yes, it's null...
}