c++ - SIGSEGV (Segmentation fault) c++ at function for pushBack() of list
问题描述
我在运行这段代码时遇到了段错误,但不明白为什么。如果首先我使用一次 push(&head,3); 那么segfault没有被捕获,但它对true不好
#include <iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
void push(Node **head,int data)
{
Node *tmp = new Node;
tmp->data = data;
tmp->next = (*head);
(*head) = tmp;
}
Node *getLast(Node *head)
{
if(head == nullptr)
{
return nullptr;
}
while(head->next)
{
head=head->next;
}
return head;
}
void show(const Node *head)
{
while(head!=nullptr)
{
cout << head->data << endl;
head = head->next;
}
}
void pushBack(Node *head,int data)
{
Node *last = getLast(head);
Node *tmp = new Node;
tmp->data = data;
tmp->next = nullptr;
last->next = tmp;
}
int main() {
Node *head=nullptr;
**//push(&head,2); /////if I use this then it works! but it not right.**
pushBack(head,10);
pushBack(head,2);
pushBack(head,3);
show(head);
return 0;
}
我试图用谷歌搜索它,但它无能为力。如何解决这个问题呢?
解决方案
如果链表为空,则需要修改head,这需要传递head的引用。这应该有效:
void pushBack(Node **head,int data)
{
Node *last = getLast(*head);
Node *tmp = new Node;
tmp->data = data;
tmp->next = nullptr;
if(last == nullptr)
{
*head = tmp;
}
else
{
last->next = tmp;
}
}
int main() {
Node *head=nullptr;
pushBack(&head,10);
pushBack(&head,2);
pushBack(&head,3);
show(head);
return 0;
}
推荐阅读
- python-3.x - 在特定单词附近使用正则表达式 python 查找特定数字
- c# - 无法使用布尔值获得特定输出
- vue.js - Vuetify v-data-table 渲染多个 v-edit-dialog
- xaml - DynamicResource 更改 FontSize 和 TextColor 然后保存在 App.Current.Resources
- postgresql-10 - 类型区间错误的无效输入语法
- typescript - 使用 Nestjs 将数据从实体传输到 DTO
- python - Plotly Dash:如何在不制作外部文件的情况下保存/缓存 Dash DataTable?
- httprequest - WinHttpRequest.5.1 和特殊字符
- java - 检测签名之间在签名 PDF 上所做的更改
- marklogic - 为什么使用字符串和结构化搜索以及开始和结束日期的组合会获得较长的响应时间?