Итак, я создаю связанный список в отдельной функции, и когда я распечатываю связанный список внутри функции, кажется, все в порядке. Однако; когда я иду на главную и пытаюсь получить доступ к связанному списку с printf, я получаю ошибку сегментации, и я смущен именно почему.Создание связанного списка, а не переход к основному
void createLL(struct node* head, struct node* curr, char ch, int number){
//lowest digit is the head
while (((scanf(" %c",&ch)) >= 0)){
curr = (struct node*)malloc(sizeof(struct node*)); //allocate space
number = ch - '0' ; //convert char to number
curr->data = number;
curr->next = head;
head = curr;
}
curr = head;
//troubleshoot
while(curr){
printf("%d\n",curr->data);
curr = curr->next;
}
curr = head;
printf("%d\n",curr->data);
}
int main(){
//initials
int i, number;
char ch;
//node pointers
struct node* headOne = NULL;
struct node* currOne = NULL;
struct node* headTwo = NULL;
struct node* currTwo = NULL;
//create linked list
createLL(headOne,currOne, ch, number);
printf("%d\n",currOne->data);
createLL(headTwo,currTwo, ch, number);
printf("%d\n",currTwo->data);
'createLL (headOne, currOne, ch, number);' Это не может работать: он не может изменить «headOne», который будет навсегда NULL. –
Расширение комментария Мартина, вам нужно будет передать указатель на указатели в createLL, чтобы вы могли изменять списки, объявленные в основном в рамках процедуры. То есть подпись createLL будет выглядеть примерно так: void createLL (struct node ** head, struct node ** curr, char ch, int number) – Harald
Также обратите внимание, что около половины вопросов LL, размещенных на SO, имеют эту проблему , и есть ЛОТ. –