我在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;}
这似乎是做工精细,因为我可以重新访问每个节点的数据,如果我尝试打印这个功能里面。 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和新的由自己管理的内存分配。
干杯!
请显示[mcve]。不要描述你的代码,而是展示它。 –