----------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char *val;
struct node *next;
};
void add_to_list(struct node **, char *);
void list_all_elements(struct node *);
int main (int argc, char **argv)
{
char *val;
struct node *head = NULL;
do {
scanf("%s",val);
add_to_list(&head, val);
}
while(val[0] != '\\');
list_all_elements(head);
}
void add_to_list(struct node **head, char *val)
{
//This produces a segfault
struct node *temp = malloc(sizeof *temp);
//EDIT - Fixed as per comments
temp->val = malloc(strlen(val) + 1);
strcpy(temp->val, val);
temp->next = NULL;
if(head!=NULL)
temp->next = *head;
*head = temp;
}
void list_all_elements(struct node *head)
{
while(head!=NULL) {
printf("%s\n",head->val);
head = head->next;
}
}
Так вот что я скомпилировал для реализации связанного списка. Теперь, по какой-то причине malloc'ing создает ошибку сегментации.Связанный список на основе строк в C вызывает ошибку сегментации
Конечно, я заменил char * на char [], и код работает нормально. Из-за этого возникает ошибка malloc или есть какая-то тривиальная ошибка, которую я не могу найти?
голова не будет нулевой, вы должны проверить * head, но это не изменится все это означает, что каждый раз, когда вы назначаете temp-> next = * head; это то, что вам нужно, вам совсем не нужно (и temp-> next = NULL) – Teudimundo
1) 'char * val;' -> 'char val [MAX_STRING_SIZE];' – BLUEPIXY