質問: 0; } STACK_TYPE peek(void){ return gStack[--gSNum]; } void printStack(void){ int i; printf("STACK[ "); for(i=0;ipeek()){ push(x); }else{ while(x>peek() || !isStackEmpty()){ pop(); } push(x); } printStack(); } return 0; } ``` ### 試したこと 実行結果を表示します 2 4 6 8 3の時、 STACK[ 2 ] STACK[ 4 ] STACK[ 6 ] STACK[ 8 ] セグメントエラー ### 補足情報(FW/ツールのバージョンなど) 正しい結果は以下のようになります。 STACK[ 2 ] STACK[ 2 4 ] STACK[ 2 4 6 ] STACK[ 2 4 6 8 ] STACK[ 2 3 ]
回答: * `peek()`で`gSNum`の値が減ってしまっている。(動作的には`pop`になってしまっている) * 「stackの頂上にある整数よりも大きい、または空状態になるまでpopして、そのあとにpush」の条件文がおかしい。 「`x`がstackの頂上にある整数よりも大きい、または空状態になる **まで** `pop()`」というのは 「`x`がstackの頂上にある整数以下で、かつ空でなければ`pop()`を繰り返す」