在发布之前,我已经浏览了Stack Overflow上的一些帖子。 每次我尝试在ideone.com(使用SPOJ引擎)上运行它时,我得到一个SIGSEGV运行时错误,我很难过。 有人可以帮帮我吗?我已经评论了我认为我可能出错的路线。
//MY CODE TO INSERT INTO A LINKED LIST
#include<iostream>
#include<malloc.h>
using namespace std;
struct Node
{
int data;
struct Node *link;
};
struct Node *node =NULL; //suspected error..not sure
void insert(int item)
{
if(node==NULL)
{
node->data=item;
node->link=NULL;
}
else
{
struct Node *temp;
temp=node->link;
node->data=item;
node->link=temp;
}
}
void display()
{
if(node==NULL)
cout<<"Linked list is empty!";
while(node!=NULL)
{
cout<<node->data<<" ";
node=node->link;
}
}
int main()
{
int n;
cin>>n;
display();
insert(n);
display();
return 0;
}
答案 0 :(得分:1)
您没有为节点分配内存。您需要在插入函数中执行此操作:
node = new Node();
只有在此之后,您才应该开始在节点中填写data
和link
。在if
和else
案例中执行此操作。
更正的代码将类似于以下内容(我没有通过编译器运行它,因此请检查编译器错误):
void insert(int item)
{
if(node==NULL)
{
node = new Node();
node->data=item;
node->link=NULL;
}
else
{
struct Node *temp = new Node();
temp=node->link;
node->data=item;
node->link=temp;
}
}
您还需要在完成列表处理后删除所有已分配的节点,否则将导致内存泄漏。
答案 1 :(得分:1)
您永远不会为正在创建的新Node
分配内存。