使用函数创建链表时出现分段错误
Segmentation fault when creating linked list with function
>我正在尝试创建一个链表,然后将节点值回显到控制台。但是在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)
。(见它工作)。
在C++中,除非另有说明,否则所有内容都按值传递。在本例中,您将传递指向节点 ( start
) 的指针以按值createList
。您可以更改它指向的节点 ( start->...
),但不能更改指针本身,因为您正在使用副本。
通过引用传递指针允许您更改指针本身。
您将 start
参数传递到按值createList
的函数中,这意味着当您这样做时
start = new node;
正在为start
的副本分配新节点的地址。这意味着您在 main
中声明的 start
变量不会接收节点的地址。
若要解决此问题,请使用指针引用。通过引用(而不是按值)将start
传递给createList
。喜欢这个:
void createList(node*& start)
通过引用传递时,您将直接更改在 main 中声明的指针,而不是创建副本。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?