Я начинаю с нуля. Пройдя много уроков, я не уверен, почему я получаю ошибку сегментации. Я получаю эту ошибку как для моих функций write_new_file, так и для search_by_firstname. Я думаю, что проблема заключается в аргументе типа PERSON * inrecord в моей функции write_new_file. Я уже пытался изменить его с указателя на inrecord и изменил все переменные соответственно, но проблема все еще существовала. Я спросил товарищей по классу и пока не решил.Почему возникает ошибка сегментации (ядро сбрасывается)?
//------TYPEDEFS------
typedef struct{
char firstname[20];
char famname[20];
char pers_number[13]; //yyyymmddnnnc
}PERSON;
void write_new_file(PERSON *inrecord){
FILE *ptr_myfile;
ptr_myfile=fopen("test.bin","w");
if (ptr_myfile==NULL)
{
printf("Unable to open file!");
exit(0);
}
strcpy(inrecord->firstname,"Name",20);
strcpy(inrecord->famname, "surname",20);
strncpy(inrecord->pers_number, "880192234",13);
fwrite(&inrecord, sizeof(PERSON), 1, ptr_myfile);
fclose(ptr_myfile);
}
void search_by_firstname(char *name){
FILE *ptr_myfile;
ptr_myfile=fopen("test.bin","r");
PERSON *temp=NULL;
if (ptr_myfile==NULL)
{
printf("Unable to open file!");
exit(0);
}
fread(temp,sizeof(PERSON),1,ptr_myfile);
if(strcmp(temp->firstname,name)!=0){
printf("Not found");
}else{
printf("found");
}
fclose(ptr_myfile);
}
int main(void){
PERSON *ppost=NULL;
write_new_file(ppost);
search_by_firstname("Neda");
return(0);
}
Вы вызываете 'write_new_file' с указателем' NULL'. И тогда 'write_new_file' пытается получить к нему доступ с' inrecord-> firstname'. Вам нужно выделить структуру, которую 'ppost' может указать, прежде чем передать ее в' write_new_file'. У вас такая же проблема с 'temp' в' search_by_firstname'. – lurker