В настоящее время я пытаюсь решить задачу по написанию кода для моего курса intro 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;
}
однако эта часть функциивыдает ошибку ошибки сегментации:
head -> next = new SinglyLinkedListNode(data);
Это объявления классов:
#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;
}
};
и Main:
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;
}
Я думал, что:
head -> next = new SinglyLinkedListNode(data);
создаст новый узел с аргументом данных в качестве данных-членов, а затем текущий головной узел будет указывать на этот список.
Я хотел бы знать, почему происходит эта ошибка сегментации.Кроме того, я не могу изменить ни одно объявление класса, ни конструкторы, так как они приведены в вызове.
GDB Trace:
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