2012-01-13 22 views
0

Iveはこれを投稿する前に、Stack Overflowに関する以前の記事をいくつか読んでいます。 私はideone.com(これはSPOJエンジンを使用しています)でこれを実行しようとするたびに、SIGSEGVランタイムエラーが発生し、私は困惑します。 誰でもお手伝いできますか? IVEは、ノードにメモリを割り当てていないリンクリストに挿入中に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

あなたのコードは右に近いものではありません。 'display()'関数は、リンクされたリストの最初の部分がどこにあるのかを忘れてしまいます。 'insert()'のコードは、それがNULLであることを確認した後にポインタを逆参照します。簡単なリンクリスト実装の実例についてはGoogleにお問い合わせください。 – Celada

+0

または、まだまだ、本をつかんで読んでください – Aamir

+0

あなたの入力に感謝します。@ Celada.Shallの仕事をしてください。 – wave5459

答えて

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; 
} 
} 

修正コードは、次のようなもの(私はコンパイラを介して実行するので、コンパイラのエラーをチェックしていない)になりますリストの処理が終了していなければ、メモリリークが発生します。

+0

AAHはい。私は間違いを今見ます。ありがとうございました。 – wave5459

1

作成中の新しいNodeには、決してメモリを割り当てません。

関連する問題