Я пытаюсь вернуть указатель на связанный список на main, чтобы я мог передать его другим функциям. В любое время Я пытаюсь получить нагрузку, чтобы передать что-либо сбой программы, и он испортил выход файла. Я просто не могу понять, почему.Ошибка программы при попытке вернуть указатель на связанный список
#include <stdio.h>
#include <stdlib.h>
struct list{ //creating linked list
char furn[128];
int priority;
struct list *next;
};
typedef struct list List; //typedef for list
//creating pointer for head of list
List **Load();
int main(List **points)
{
points->Load(); //crashes here no if I try to set Load to anything, works fine and prints okay if I don't
}
List ** Load()
{ List *head;
List *current; //so we can build and navigate list
List *new;
FILE *fin, *fout; //so that we can start file manipulation
char name[]= "California.txt" ;
fin=fopen(name, "r");
new=malloc((sizeof(List))); //creating list
head=new;
while(current->next!=NULL)
{
current=new;
new=malloc((sizeof(List)));
fscanf(fin,"%s %d",current->furn,¤t->priority); //reading and populating list
current->next=new;
if(feof(fin))
current->next=NULL;
}
current=head;
printf("%s %d",current->furn,current->priority);
while(current->next!=NULL)
{
printf("Starting");
printf("%s %d",current->furn,current->priority);
current=current->next;
}
List **points=&head;
return points; //Returning so we can have a pointer to the list
}
Я не действительно в C, но 'int main (List ** points)' работает? – pzaenger
Переменная точек выходит за пределы области действия и получает выделение при выходе из метода. Вы не можете вернуть его. – nicomp
'points-> Load();' не следует даже компилировать, независимо от того, насколько разрешительны настройки вашего компилятора. Это не C (это тоже не C++). Если он каким-то образом скомпилируется, авария, скорее всего, связана с тем, что 'points->' пытается разыменовать целое число «1» (или аналогичное небольшое число, которое не является допустимым адресом), поскольку первый аргумент 'main' небольшое целое на любой нормальной ОС. – Leushenko