У меня есть двойной связанный список на C, в узлах которого есть char *. Моя структура для узла выглядит следующим образом:Программа вылетает при печати LinkedList
struct LinkedListNode{
char* data;
LinkedListNode* next;
LinkedListNode* prev; };
структура для LinkedList выглядит следующим образом:
struct LinkedList{
LinkedListNode* head;
LinkedListNode* tail;};
голова является указателем на первый узел списка, хвост указатель последний узел списка. Моя проблема заключается в том, что я пытаюсь написать функцию для тестирования некоторых стандартных функций для связанных списков, которые я реализую для практических целей. Поэтому я начинаю с создания списка в следующей функции:
LinkedList* make_test_list(){
LinkedList* newlist = LinkedList_create();
printf("Hier2");
LinkedListNode n1;
LinkedListNode n2;
LinkedListNode n3;
LinkedListNode n4;
LinkedListNode n5;
n1.data = "abc";
n2.data = "def";
n3.data = "ghi";
n4.data = "pqr";
n5.data = "mno";
n1.next = &n2;
n2.next = &n3;
n2.prev = &n1;
n3.next = &n4;
n3.prev = &n2;
n4.next = &n5;
n4.prev = &n3;
n5.prev = &n4;
n5.next = NULL;
newlist->head = &n1;
newlist->tail = &n5;
return newlist;}
который, кажется, работает нормально, так как я могу reaccess данные каждого узла, если я пытаюсь напечатать внутри этой функции. LinkedList_create() содержит следующий код:
LinkedList* LinkedList_create(){
LinkedList* list = malloc(sizeof(struct LinkedList));
list->head = NULL;
list->tail = NULL;
return list;
}
Так что следующая вещь, которую я хочу сделать, это печать моего списка в отдельной функции. функция выглядит следующим образом:
void LinkedList_print(LinkedList* list){
LinkedListNode* p = list->head;
while(p != NULL)){
printf("%s\n", p->data);
p = p->next;
}}
Но почему-то не работает. Я думаю, что я ошибся, назначив свои указатели. Вызов выглядит следующим образом:
int main(){
LinkedList* myList = make_test_list();
printf("List before: \n");
LinkedList_print(myList);
}
Я был бы рад, если бы вы могли бы помочь мне в этом, так как я совершенно новой для C и новым для управления распределением памяти самостоятельно.
Cheers!
Просьба показать [mcve]. Не описывайте свой код, покажите его. –