0

リンク リストの末尾にノードを挿入しようとしています。しかし、新しいノードを指すようにテール ポインターを移動すると、セグメンテーション違反のエラーが発生します。

また、テールの次の値の現在の値を出力できません。これは NULL である必要があります。

Mac環境でgccを使用しています。

 void insert_tail(int val,struct node **tail)
 {
    struct node *new_node=NULL;
    new_node=malloc(sizeof(*new_node));
    new_node->data=val;
    //printf("%p",(void*)*(*tail)->next);
    *(*tail)->next=*new_node;
    *tail=new_node;
 }

Visual C で同じコードを実行しても、エラーは発生しません。

これを解決するのを手伝ってください。

4

2 に答える 2

1

struct node定義は表示されませんでしたが、次の行:

*(*tail)->next=*new_node;

ほぼ確実に、逆参照が多すぎます。何かのようなもの:

(*tail)->next = new_node;

struct node次のようなa の場合、より正常になります。

struct node {
    int data;
    struct node *next;
};
于 2013-09-20T03:17:36.753 に答える
1

正しく逆参照していません:

*(*tail)->next = *newNode;

これはと同じです

次のようにする必要があります。

(*tail)->next = newNode;

または

(**tail).next = newNode;

次はポインターであるため、newNode を逆参照することは正確ではありません。bc で逆参照してポインターに割り当てると、バイトがポインターにキャストされ、メモリ アドレスとして読み取られ、セグメント フォールト (異なるサイズ、不良メモリ)アドレスなど)。

于 2013-09-20T03:23:40.133 に答える