C函数初始化并显示给出分段错误的单链表
C function to initialize and display singly linked list giving segmentation fault
我的函数出现分段错误,我不明白为什么。
如果 list_initialize 的 return 类型是 List 本身,它工作得很好。但我需要 return 类型为 void 并且程序仍然有效。
#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);
}
我的函数出现分段错误,我不明白为什么。 如果 list_initialize 的 return 类型是 List 本身,它工作得很好。但我需要 return 类型为 void 并且程序仍然有效。
#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);
}