插入链接列表时出现SIGSEGV错误

时间:2012-01-13 04:45:53

标签: c++ linked-list

在发布之前,我已经浏览了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;
}

2 个答案:

答案 0 :(得分:1)

您没有为节点分配内存。您需要在插入函数中执行此操作:

node = new Node();

只有在此之后,您才应该开始在节点中填写datalink。在ifelse案例中执行此操作。

更正的代码将类似于以下内容(我没有通过编译器运行它,因此请检查编译器错误):

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分配内存。