【发布时间】:2019-11-07 19:29:24
【问题描述】:
我需要创建一个节点链表,这样主函数才能工作;我无法更改主要功能中的任何内容。我是 C 的新手,所以我可能会犯一两个简单的错误,当我尝试运行我的代码时遇到了分段错误。我错过了什么明显的东西吗?
分段错误发生在标记线上
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
char *value;
struct Node *next;
}Node;
typedef struct Node** List;
Node *new_node(char *input);
void delete_node(Node *input);
void push(List list, char *value);
List new_list();
Node *new_node(char *input) {
Node *new;
new = malloc(sizeof(Node));
new->value = input;
return new;
}
void delete_node(Node *input) {
free(input);
}
void push(List head, char *input) {
if (*head == NULL) {
*head = new_node(input);
}
else {
Node *new = new_node(input);
while ((*head)->next != NULL) {
*head = (*head)->next;
}
(*head)->next = new;
}
}
List new_list() {
List list = malloc(sizeof(List));
*list = NULL;
return list;
}
int main( void ) {
List list = new_list();
push(list, "First!\n");
push(list, "Second!\n");
push(list, "Third!\n");
push(list, "Fourth!");
printf("%s", (*list)->value);
printf("%s", (*list)->next->value);
printf("%s", (*list)->next->next->value); //Segmentation fault
printf("%s", (*list)->next->next->next->value);
return 0;
}
当我用 gdb 运行它时,我得到了消息:
Third!
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400752 in main () at main.c:54
54 printf("%s", (*list)->next->next->value);
【问题讨论】:
-
哎哟!
typedef struct Node** List;你会想要评论:Is it a good idea to typedef pointers?。我不敢相信你不能改变这一点。当您将指针隐藏在typedef后面时,实际了解正在发生的事情变得非常困难。
标签: c linked-list