Sim*_*rfe 2 c++ linked-list segmentation-fault
我目前正在尝试解决学习C ++入门课程的编码挑战,而我只是想了解我遇到的分段错误。
我正在编写一个给定的函数,将节点插入到链表的末尾。这个想法是,给定整数输入,第一个输入将被视为列表末尾的一部分,因为它的指针成员变量为nullptr。之后,必须附加所有其他输入,以便它们的插入发生在该空节点之前。
这是函数的第一部分:
SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {
if(head == nullptr) //if the list is empty
{
head -> next = new SinglyLinkedListNode(data);
return head;
}
return head;
}
Run Code Online (Sandbox Code Playgroud)
但是函数的这一部分给了我一个分段错误错误:
head -> next = new SinglyLinkedListNode(data);
Run Code Online (Sandbox Code Playgroud)
这些是类声明:
#include <bits/stdc++.h>
using namespace std;
class SinglyLinkedListNode {
public:
int data;
SinglyLinkedListNode *next;
SinglyLinkedListNode(int node_data) {
this->data = node_data;
this->next = nullptr;
}
};
class SinglyLinkedList {
public:
SinglyLinkedListNode *head;
SinglyLinkedList() {
this->head = nullptr;
}
};
Run Code Online (Sandbox Code Playgroud)
和主要:
int main()
{
ofstream fout(getenv("OUTPUT_PATH"));
SinglyLinkedList* llist = new SinglyLinkedList();
int llist_count;
cin >> llist_count;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
for (int i = 0; i < llist_count; i++) {
int llist_item;
cin >> llist_item;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
SinglyLinkedListNode* llist_head =
insertNodeAtTail(llist->head, llist_item);
llist->head = llist_head;
}
print_singly_linked_list(llist->head, "\n", fout);
fout << "\n";
free_singly_linked_list(llist->head);
fout.close();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我当时在想:
head -> next = new SinglyLinkedListNode(data);
Run Code Online (Sandbox Code Playgroud)
将使用data参数作为成员数据创建一个新节点,然后当前的头节点将指向该列表。
我想知道为什么会发生这种分割错误。另外,我不能更改任何类声明或构造函数,因为这是在挑战中给出的方式。
GDB跟踪:
Reading symbols from solution...done.
[New LWP 22279]
Core was generated by `solution'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x0000000000400eea in insertNodeAtTail (head=<optimized out>,
data=<optimized out>) at solution.cc:62
62 head -> next = new SinglyLinkedListNode(data);
#0 0x0000000000400eea in insertNodeAtTail (head=<optimized out>,
data=<optimized out>) at solution.cc:62
#1 0x0000000000400c2e in main () at solution.cc:88
Run Code Online (Sandbox Code Playgroud)
因为取消引用空指针(head IS空)是未定义的行为,其结果可能是分段错误:
if(head == nullptr) //if the list is empty
{
head -> next = new SinglyLinkedListNode(data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |