2017-12-20 21 views
-1

Cのリンクリストからノードを削除しようとすると、問題が1つ発生します。 どこが間違っているのか分かりませんが、期待されているものも最後のものもなくなってしまい、私がfree()を実行すると実際には動作しません。それはまだいくつかのデータを保持しています。 誰も助けてくれますか?リンクリストからノードを削除しても正しく動作しない

node=head; 
temp=node->next; 

if(record == 1){ 
    head=head->next; 
    printf("\nInside if count %d node %s head %s",count, node->name, head->name); 
    free(node); 
} 
else if (record > 1){ 
    while(count < record-1 && count < list_size){ 
     printf("\nInside while count %d node %s head %s",count, node->name, head->name); 
     node = temp; 
     temp = temp->next; 
     node->next = temp->next; 
     count++; 
    } 
    printf("\nOutside while temp %s node %s head %s",temp->name,node->name,head->name); 
    free(temp); 
} 
+0

少なくとも、この文の一時=リンパ節転移のようなものになるだろう。意味がなく、未定義の動作につながる可能性があります。 –

+0

関数からのコードスニペットであれば、完全な関数を表示してください。 –

+0

次のステートメントnode-> next = temp-> next; whileループでも意味をなさない。 –

答えて

0

はまあ未定義の動作を起動するの大手NULL値へのアクセスにつながる可能性があり、あなたのコード内の場所があります。 はここに私のコードです。

node = head; 
temp = head; 
if(head == NULL){ 
    fprintf(stderr,"List is empty"); 
    exit(1); 
} 
if(record == 1){ 

    head=head->next; 
    printf("\nInside if count %d node %s head %s",count, node->name, head->name); 
    free(node); 
} 
else if (record > 1){ 
    for(size_t i = 1; i < record && temp != NULL; i++){ 
     node = temp; 
     temp = temp -> next; 
    } 
    if(temp) 
     node->next = temp->next; 
    free(temp); 
} 

このような書き込み方法では、ポインタを使用してください。ここでは、グローバル変数は必要ありません。以前のコードでは何か意味のあることをしていなかった冗長な代入文がありました。

完全な例は次の>

struct Node* deleteNth (struct Node *head, int N){ 
    struct Node *t ; 
    if(head == NULL){ 
     fprintf(stderr, "%s\n", "List is empty"); 
     exit(1); 
    } 
    if(N <= 0){ 
     fprintf(stderr, "%s\n", "Position given wrong"); 
     exit(1); 
    } 
    if(N == 1){ 
     t = head; 
     head = head->next; 
     free(t); 
     return head; 
    } 

    struct Node *p = t; 
    int i; 

    for(i = 1; i < N && t!=NULL; i++){ 
     p = t; 
     t = t->next; 
    } 
    if(t == NULL){ 
     fprintf(stderr,"%s\n","Insuffiecient Number of elements"); 
     exit(1); 
    } 
    if(t!= NULL){ 
     p->next = t->next; 
    } 
    free(t); 
    return head; 
} 
関連する問題