«выход, ошибка сегментации» Со Связанным Списком

#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 .