【问题标题】:"exited, segmentation fault" with struct结构的“退出,分段错误”
【发布时间】:2021-07-17 07:14:23
【问题描述】:

对于下面的 C++ 代码,我已经声明了一个名为“newNode”(node *newNode)的“node”结构的指针,并尝试输入一个 id # 并将其输入到 newNode->id 中。输入 id # 后,我收到一条错误消息,提示“已退出,分段错误”。我了解这意味着我们正在尝试访问我们无权访问的内存位置,但不知道如何解决此问题。我很感激任何反馈。谢谢。

#include <iostream>
using namespace std;

struct node 
{
    int id;
    string name;
    int age;
    node *nxt;
};

node *head = NULL;

void InsertNode()
{
  node *currentNode, *newNode, *nextNode;

  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;

  currentNode = head;

  while (currentNode != NULL)
  {
    if (newNode->id == currentNode->id)
    {
      cout << "The ID you entered was already assigned to another node. Please enter a different ID number for the node that you are inserting: " << endl;
      cin >> newNode->id;
    }else{
      currentNode = currentNode->nxt;
    }
  }

  if (head == NULL)
  {
    head = newNode;
  }else{
    currentNode = head;
    while (currentNode != NULL)
    {
      nextNode = currentNode->nxt;
      if (newNode->id < nextNode->id)
      {
        if(currentNode == head)
        {
          head = newNode;
          newNode->nxt = nextNode;
        }else if (nextNode->nxt == NULL && newNode->id > nextNode->id)
        {
          newNode->nxt = NULL;
          nextNode->nxt = newNode;
        }else{
          newNode->nxt = nextNode;
        }
      }else{
        currentNode = nextNode;
      }
    }
  }
}

int main()
{
  InsertNode();

  return 0;
}

【问题讨论】:

标签: c++ struct segmentation-fault


【解决方案1】:

您只创建了可以指向结构类型节点的指针,但实际上并没有为这些结构分配内存。这就是为什么您在尝试访问不存在的位置时遇到分段错误的原因。 首先通过动态内存分配创建一个结构节点,比如 malloc,然后尝试将 Id 分配给它。

【讨论】:

    【解决方案2】:

    你已经创建了一个指向结构的指针,当你试图在指针的位置插入一些东西,但指针没有指向结构的对象。

    您需要为插入动态分配节点。

    node *currentNode, *newNode, *nextNode;
    
    newNode = new node(); // <- this is what you need to do, so you can insert. 
    
      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;
    

    前进,繁荣昌盛。

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 2021-11-08
      • 2011-08-24
      • 2020-02-17
      • 2014-01-18
      • 2023-04-04
      相关资源
      最近更新 更多