结构的“退出,分段错误”
Posted
技术标签:
【中文标题】结构的“退出,分段错误”【英文标题】:"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;
【问题讨论】:
如果你使用指针,你需要将它指向某个东西。 Turn on compiler warnings, and the compiler will diagnose many categories of mistakes. 【参考方案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;
前进,繁荣昌盛。
【讨论】:
以上是关于结构的“退出,分段错误”的主要内容,如果未能解决你的问题,请参考以下文章