gpt4 book ai didi

c++ - 使用函数创建链表时出现段错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:44:54 26 4
gpt4 key购买 nike

我正在尝试创建一个链表,然后将节点值回显到控制台。但是在 main 函数之外使用函数并调用它会导致 segmentation fault(core dumped)。我不明白为什么。以下代码有效:

#include<iostream>
using std::cout;
using std::endl;

struct node
{
int val;
node* next;
};

void printList(node* start)
{
node* temp;
temp = start;
int i = 0;
while(temp->next != NULL)
{
cout<<"The value in the "<<i<<"th node is : "<<temp->val<<endl;
temp = temp->next;
i++;
}
}
int main()
{
node* start;
node* temp;
start = new node;
temp = start;
for(int i = 0; i < 10; i++)
{
temp->val = i*10;
temp->next = new node;
temp = temp->next;
}
temp->val = 0;
temp->next = NULL;
printList(start);
return 0;
}

但这会引发段错误

#include<iostream>
using std::cout;
using std::endl;

struct node
{
int val;
node* next;
};
void createList(node* start)
{
node* temp;
start = new node;
temp = start;
for(int i = 0; i < 10; i++)
{
temp->val = i*10;
temp->next = new node;
temp = temp->next;
}
temp->val = 0;
temp->next = NULL;
}
void printList(node* start)
{
node* temp;
temp = start;
int i = 0;
while(temp->next != NULL)
{
cout<<"The value in the "<<i<<"th node is : "<<temp->val<<endl;
temp = temp->next;
i++;
}
}
int main()
{
node* start;
createList(start);
printList(start);
return 0;
}

最佳答案

void createList(node* start) 更改为 void createList(node*& start)。 (See it work)。

在 C++ 中,除非另有说明,否则所有内容均按值传递。在这种情况下,您将指向节点 (start) 的指针传递给 createList 按值。您可以更改它指向的节点 (start->...),但不能更改指针本身,因为您正在使用一个拷贝。

通过引用传递指针允许您更改指针本身。

关于c++ - 使用函数创建链表时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22916037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com