2017-10-25 6 views
0

私はリンクリストプログラムをC言語で書いていますリンクされたリストprgrmは作業エラーを停止しました

問題はcreate functionです。 Create()は最初の実行時に完全に機能します。それから、メニューを終了して、作成機能をもう一度呼び出すと、 "linkedlist has working has stopped"というメッセージが表示され、プログラムがクラッシュします。ヒント:linkedlistは私のprgrmの名前です。

void create() 
{ 
    do 
    { 
     printf("Enter the num:"); 
     head=(NODE *) malloc(sizeof(NODE)); 
     scanf("%d",&head->num); 
     head->next=NULL; 
     if(start==NULL) 
      start=ptr=head; 
     else 
     { 
      ptr->next=head; 
      ptr=head; 
     } 
     printf("Do you want to enter more elements:(1/0)"); 
     scanf("%d",&ch); 
    } 
    while(ch==1); 
} 
+2

[MCVE]を表示してください –

+0

ヒント:デバッガの使い方を学んでください。 –

+0

グローバル変数( 'head'、' ch'、 'start'と' ptr')を大量に使用することで、プログラムを根本から考え直すべきだと思います。 –

答えて

0

私が(作成の次の行に示すように、リンクされたリストの最後のノードへのポインタとしてPTRを使用しています。コードから守っ)機能: - にいる間

if (start==NULL) 
    start = ptr = head; 
else 
{ 
    ptr->next=head; 
    ptr=head; 
} 

表示機能、あなたは再び

ptr = start; 

をinitialiingして、ptrが次の行のようにゼロになるループの最後に横断している: -

while(ptr!=NULL) 
{ 
    printf("%d->",ptr->num); 
    ptr=ptr->next; 
} 

(同様delastで()とデラニー()関数は、次の操作をしている: -

free(ptr); 

再び従ってセグメンテーション障害をもたらす、PTR =ヌルを作ることになる 。 )

したがって、最初にリストを作成すると、ptrの値は保持されるため、コードは正常に機能しますが、リストを表示したり要素を削除したりすると、リストが作成されますオプション1)は、PTRの値がヌルになるので、セグメンテーション違反

ptr->next = head; 

結果。

したがって、create()関数で* ptrの代わりに新しいポインタsay * endを使用し、end = nullの値を決して使用しないでください。以下に示すように: -

void create() 
{ 
do{ 
    printf("Enter the num:"); 
    head=(NODE *) malloc(sizeof(NODE)); 
    scanf("%d",&head->num); 
    head->next=NULL; 
    if(start==NULL) 
     start=end=head; 
    else 
    { 
     end->next=head; 
     end=head; 
    } 
    printf("Do you want to enter more elements:(1/0)"); 
    scanf("%d",&ch); 
} 
while(ch==1); 
} 

またはリストを作成するとき、あなたは、あなたが新しい要素を追加するために、リストの最後に横断し、代わりの直接終了ポインタを(使用することができますので、余分を保存する必要はありません終了ポインタ)。

void create() 
{ 
do{ 
    printf("Enter the num:"); 
    head=(NODE *) malloc(sizeof(NODE)); 
    scanf("%d",&head->num); 
    head->next=NULL; 
    if(start == NULL) 
     start = head; 
    else 
    { 
     ptr = start; 
     while (ptr->next != NULL){ 
      ptr = ptr->next; 
     } 
     ptr->next = head; 
    }   
    printf("Do you want to enter more elements:(1/0)"); 
    scanf("%d",&ch); 
} 
while(ch==1); 
} 
+0

ありがとうございます。助けを求めて –

関連する問題