すでにソートされた2つのリンクリストtemp1
とtemp2
をマージしようとしています。私は、この例のセグメンテーションフォールト取得しています:セグメンテーションフォルト(コアダンプ) 'printf'文を実行する前にエラーが発生する
入力
temp1 : 1->NULL
temp2 : 2->3->4->5->6->NULL
出力
をしかし、私はprintf
文から "\ n" を削除した場合、それは直接、セグメンテーションフォールトを表示します。
なぜこれが起こっているのでしょうか?
コード:事前に
list *merge(list * temp1, list * temp2)
{
list *x, *y, *z;
x = temp1;
y = temp2;
print(x);
print(y);
z = (list *) malloc(sizeof(list));
if (x->key < y->key)
{
z->key = temp1->key;
x = x->next;
}
else
{
z->key = temp2->key;
y = y->next;
}
z->next = NULL;
while (x || y)
{
printf("asdf\n");
if (x == NULL)
{
z = append(z, y->key);
y = y->next;
printf("x\n");
}
if (y == NULL)
{
z = append(z, x->key);
x = x->next;
printf("y\n");
}
if (x && y)
{
printf("x && y\n");
if (x->key < y->key)
{
z = append(z, x->key);
x = x->next;
}
else
{
z = append(z, y->key);
y = y->next;
}
}
}
print(z);
return z;
}
感謝。
私はすでにセグメント化エラーを削除しました。私はprintfステートメントから '\ n'を削除するとなぜ遅れるのか尋ねています。
ようこそスタックオーバーフローに!デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) –
なぜセグメンテーションを取得しているのか、改行を削除したときに出力が表示されないのはなぜですか? – Kevin
デバッガを使ってみましたか?あなたはポインタを適切に割り当てていないか、あるいは望ましくないメモリをどこかに上書きしているかもしれません。表示されていない 'append'の中でさえもそうです。これを絞り込んで、ここの他の人があなたのコードを探して魚を見つけることを期待するのではなく、それを見つける必要があります。また、[mallocの返却をキャストしない](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 – lurker