Я работаю над некоторым кодом, чтобы прочитать файл, содержащий список пользователей, их информацию, и поместить информацию обо всех пользователях в связанный список.Два параметра пользовательской структуры - это указатель на связанный список местных жителей и указатель на связанный список точек интереса.
Каждая строка файла принадлежит другому пользователю.
Программа полностью работает для всего - кроме связанного списка местных жителей.Мой процесс заключается в создании связанного списка локальных элементов для каждой строки файла, а затем передачи указателя на первый узел этого списка (вместе с остальной частью информации от пользователя этой строки) в функцию insertpersonlist
добавить этого пользователя и его информацию в связанный список.
Каждый связанный список местных жителей работает нормально, ДО того, как я сохраню его вместе с остальной информацией о пользователе в связанном списке пользователей.После передачи его в функцию insertpersonlist
при попытке получить доступ к списку локальных пользователей возникает ошибка сегментации.
Я знаю, что код немного большой, но любая помощь действительно приветствуется.Заранее спасибо.
typedef struct pdi{
char *name;
char *descript;
char *schedule;
int id;
int popp;
int hotpoints;
struct pdi *prox;
}t_pdi;
typedef struct local{
int id;
char *name;
int popl;
struct local *prox;
}t_local;
typedef struct pessoa{
char *name;
char *address;
char *dob;
int phonenumber;
t_pdi *pdis;
t_local *local;
struct pessoa *prox;
}t_person;
void crialistapessoas(t_person *header_p, t_pdi *header_pdi, t_local *header_l){
FILE *fp;
t_person *node = header_p;
t_pdi *new1listpdi = create_headerPDI();
t_pdi *nodepdi = new1listpdi;
t_local *new1L;
t_pdi *new1PDI;
t_local *new1listlocals = create_headerL();
t_local *nodelocal = new1listlocals;
t_local *tempnodel;
t_pdi *tempnodepdi;
char *name = malloc(200*sizeof(char));
char *line = malloc(200*sizeof(char));
char *address = malloc(200*sizeof(char));
char *dob = malloc(200*sizeof(char));
int phonenumber;
int tempid,i, n;
fp = fopen("names.txt", "r");
fgets(line, 150, fp);
while(strcmp(line, "end")!=0){
name = strtok(line, "/");
address = strtok(NULL, "/");
dob = strtok(NULL, "/");
phonenumber = atoi(strtok(NULL, "/"));
new1listpdi = create_headerPDI();
new1listlocals = create_headerL();
nodepdi = new1listpdi;
nodelocal = new1listlocals;
n = atoi(strtok(NULL,"/"));
for(i=0;i<n;i++){
tempid = atoi(strtok(NULL,"/"));
printf("%d\n", tempid);
if(tempid>1000){
tempnodel = header_l;
while(tempnodel!=NULL && tempnodel->id != tempid){
tempnodel = tempnodel->next;
}
new1L = create_headerL();
new1L->id=tempid;
printf("%d\n", tempnodel->id);
new1L->name = strdup(tempnodel->name);
new1L->popl = tempnodel->popl;
new1L->next = nodelocal->next;
nodelocal->next = new1L;
}
else{
tempnodepdi = header_pdi;
while(tempnodepdi!=NULL && tempnodepdi->id != tempid){
tempnodepdi = tempnodepdi->next;
}
new1PDI = create_headerPDI();
new1PDI->id = tempid;
new1PDI->name = strdup(tempnodepdi->name);
new1PDI->descript = strdup(tempnodepdi->descript);
new1PDI->schedule = strdup(tempnodepdi->schedule);
new1PDI->hotpoints = tempnodepdi->hotpoints;
new1PDI->popp = tempnodepdi->popp;
new1PDI->next = nodepdi->next;
nodepdi->next = new1PDI;
}
}
insertpersonlist(header_p, name, address, dob, phonenumber, new1listlocals, new1listpdi);
fgets(line, 150, fp);
}
}
t_person *insertpersonlist(t_person *header_p, char *name, char *address, char *dob, int phonenumber, t_local *listlocals, t_pdi *listpdis){
t_person *new1;
t_person *node = header_p;
new1 = create_headerPerson();
if (new1== NULL)
return NULL;
while((node->next!=NULL)&&(strcmp(node->next->name, name)<0)){
node = node->next;
}
new1->name = strdup(name);
new1->address = strdup(address);
new1->dob = strdup(dob);
new1->phonenumber = phonenumber;
new1->pdis = listpdis;
new1->local = listlocals;
new1->next = node->next;
node->next = new1;
}