ページ 11

Segmentation fault

Posted: 2022年11月15日(火) 01:49
by netai
大学の課題でプログラミングをしています。
コンパイルは通ったのですが、Segementation fault(コアダンプ)になりました。

以下、実行結果です。
head value:429
リストの要素数:6
429 591 531 494 932 956
枢軸値:429
デバッグ:429
デバッグ:429
Segmentation fault (コアダンプ)


以下、問題があると思っている箇所です。プログラムの一部でごめんなさい。

コード:

printf("枢軸値:%d\n",pivot);

  while(p->next!=NULL){
    printf("デバッグ:%d\n",p->value);
    printf("デバッグ:%d\n",pivot);
    
    if(p->value==pivot){
      printf("デバッグ");
while文内、if文前のp->valueとpivotの値の表示はできているのですが、
if文内の「デバッグ」の表示がされていないので、
if文の条件式に問題があると思っています。
が、何がおかしいのかわかりません。

どなたか分かる方いましたら教えて頂きたいです。
よろしくお願いします。

Re: Segmentation fault

Posted: 2022年11月15日(火) 07:32
by みけCAT

コード:

printf("デバッグ");
による出力がバッファに残ったまま書き出されずに強制終了している可能性があります。

コード:

printf("デバッグ\n");
のように改行を追加してみてください。

コード:

printf("デバッグ");
fflush(stdout);
のように出力をフラッシュする処理を入れると、より確実でしょう。

コード:

デバッグ:429
デバッグ:429
が表示できているということは

コード:

while(p->next!=NULL){
は落ちずに実行できており、この時の p の値に問題は無さそうですね。
そしてここから

コード:

if(p->value==pivot){
までの間に p の値を書き換えるコードは無いようなので、Segmentation faultの原因は別の場所にあるでしょう。

Re: Segmentation fault

Posted: 2022年11月15日(火) 09:14
by netai
みけCATさん
おっしゃったとおりにしたら、if文内までの実行が確認できました。
なんとか先に進めそうです、ありがとうございます。