c-为什么它在我的代码中显示分段错误



这是将两个字符串打印在一起的代码,但每当我尝试运行它时,都会出现分段错误,但它编译时没有任何错误,有人能帮忙吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
char *data; //string data in this node
struct node *next; //next node or NULL if none
} Node;
void print(Node *head); //function prototype print
Node *push_node(Node x, Node *strlist);
int main ()
{
Node node1;
Node node2;
Node *list = NULL;
strcpy(node1.data, "world");
push_node(node1, list);
strcpy(node2.data, "hello");
push_node(node2, list);
print(list);
return 0;
}
void print(Node *head)
{
Node *p = head;
while (p != NULL)
{
printf("%s", p->data);
p = p->next;
}
}
Node *push_node(Node x, Node *strlist)
{
x.next= strlist;
return &x;
}

您声明了两个Node 类型的对象

Node node1;
Node node2;

其数据成员未初始化。也就是说,对象的指针data具有不确定的值。

因此调用函数strcpy

strcpy(node1.data, "world");
strcpy(node2.data, "hello");

导致未定义的行为。

此外,指针list在程序内没有被改变。它在初始化时总是等于NULL。因此,调用函数print是没有意义的。

为了使您的代码至少可以工作,您需要进行以下更改。

Node *push_node(Node *x, Node *strlist);
//...
node1.data = "world";
list = push_node( &node1, list);
node2.data = "hello";
list = push_node( &node2, list);
print(list);
//...
Node *push_node(Node *x, Node *strlist)
{
x->next= strlist;
return x;
}

相关内容

  • 没有找到相关文章

最新更新