#c #memory #linked-list #segmentation-fault
Вопрос:
Я пытаюсь создать функцию, которая проверяет, меньше ли идентификационный номер узла в связанном списке, чем идентификационный номер в следующем узле. Я не знаю, почему в этом случае я получаю ошибку «ошибка выхода, ошибка сегментации». Пожалуйста, дайте мне знать. Спасибо.
Example:
Node 1:
ID # = 4;
Node 2:
ID # = 5;
Я считаю, что проблема возникает, когда я создаю указатель узла (производный от объявленной мной структуры) и выполняю следующую операцию:
node *currentNode = new node();
node *newNode = new node();
node *nextNode = new node();
currentNode = head;
while (currentNode != NULL)
{
nextNode = currentNode->nxt;
// Check
cout << "newNode->nxt: " << newNode->nxt << endl;
cout << "currentNode->nxt: " << currentNode->nxt << endl;
cout << "nextNode->nxt: " << nextNode->nxt << endl; // This line is giving us "exited, segmentation fault
cout << "Hello5n";
if (newNode->id < nextNode->id) // This line is also part of the same problem ("exited, segmentation fault")
{
}
struct node
{
int id;
string name;
int age;
node *nxt;
};
node *head = NULL;
void InsertNode()
{
node *currentNode = new node();
node *newNode = new node();
node *nextNode = new node();
cout << "You will now be prompted to enter the id number, name, and age of a particular person..." << endl;
cout << "Enter id number: ";
cin >> newNode->id;
cout << "Enter name: ";
cin >> newNode->name;
cout << "Enter age: ";
cin >> newNode->age;
if (head == NULL)
{
head = new node();
head = newNode;
}else{
currentNode = head;
while (currentNode != NULL)
{
nextNode = currentNode->nxt;
// Check
cout << "newNode->nxt: " << newNode->nxt << endl;
cout << "currentNode->nxt: " << currentNode->nxt << endl;
cout << "nextNode->nxt: " << nextNode->nxt << endl; // This line is giving us "exited, segmentation fault
cout << "Hello5n";
if (newNode->id < nextNode->id) // This line is also part of the same problem ("exited, segmentation fault")
{
cout << "Hello6n";
if(currentNode == head)
{
cout << "Hello7n";
head = newNode;
cout << "Hello8n";
newNode->nxt = nextNode;
cout << "Hello9n";
}else if (nextNode->nxt == NULL amp;amp; newNode->id > nextNode->id)
{
cout << "Hello10n";
newNode->nxt = NULL;
cout << "Hello11n";
nextNode->nxt = newNode;
cout << "Hello12n";
}else{
cout << "Hello13n";
newNode->nxt = nextNode;
cout << "Hello14n";
}
}else{
cout << "Hello15n";
currentNode = nextNode;
cout << "Hello16n";
}
}
}
}
Комментарии:
1. Вы разыменовываете
nextNode
, не проверяя, так ли этоnullptr
.