如何解决C函数初始化并显示单链表,给出分段错误
我的函数给出了细分错误,我不知道为什么。 如果list_initialize的返回类型是List本身,则可以正常工作。但是我需要返回类型为空并且程序仍然可以工作。
#include <stdio.h>
#include <stdlib.h>
typedef struct List List;
typedef struct Node Node;
struct Node {
int data;
struct Node *link;
};
struct List {
Node *head;
int number_of_Nodes;
};
void list_initialize(List* ptr_list)
{
ptr_list = (List*)malloc(sizeof(List));
(ptr_list)->head = NULL;
(ptr_list)->number_of_Nodes = 0;
return;
}
void list_print(List* list)
{
Node *p;
p=list->head;
if(p == NULL)
{
printf("EMPTY\n");
return;
}
while (p!=NULL)
{
printf("%d ",p->data);
p=p->link;
}
printf("\n");
}
void main()
{
List *list;
list_initialize(list);
list_print(list);
}
解决方法
您在第27行(p = list->head;)
遇到分段错误,尝试使用空指针。正如潜伏者提到的那样,list_initialize
按值接受参数,因此它没有修改其输入参数,因此在您的main
变量list
中始终为空。
以下代码可能有效,
#include <stdio.h>
#include <stdlib.h>
typedef struct List List;
typedef struct Node Node;
struct Node {
int data;
struct Node *link;
};
struct List {
Node *head;
int number_of_Nodes;
};
void list_initialize(List** pptr_list)
{
List* ptr_list = (List*)malloc(sizeof(List));
(ptr_list)->head = NULL;
(ptr_list)->number_of_Nodes = 0;
*pptr_list = ptr_list;
return;
}
void list_print(List* list)
{
Node *p;
p = list->head;
if (p == NULL)
{
printf("EMPTY\n");
return;
}
while (p != NULL)
{
printf("%d ",p->data);
p = p->link;
}
printf("\n");
}
int main()
{
List *list = nullptr;
list_initialize(&list);
list_print(list);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。