2

Linux で SIC/XE アセンブラを開発する宿題をしています。

コードを作成したときにエラーが発生しましたが、なぜこれが起こるのかわかりません。この問題が発生した理由を説明していただけますか?

以下に示すコードは、トークンを含む「test.asm」ファイルを明らかにします。

178             printf("token1: %s \t",token1);
179             printf("token2: %s \t",token2);
180             printf("token3: %s \t",token3);
181             printf("token4: %s \t",token4);
182             printf("ss\nss");

これによると、特に「ss\nss」ステートメントは、次のような出力結果を期待していました。

    sstoken1: LDT   token2: LENGTH  token3: (null)  token4: (null)  ss
    sstoken1: WLOOP         token2: TD      token3: OUTPUT  token4: (null)  ss
    ss

しかし、このプログラムを最後まで実行すると、セグメンテーション違反が発生し、奇妙な状況に遭遇しました。

sstoken1: OUTPUT        token2: BYTE    token3: X'05'   token4: (null)  ss
sstoken1: END   token2: FIRST   token3: (null)  token4: (null)  ss
Segmentation fault.

「Segmentation fault」ステートメントの前に「ss」がありません。理由がわかりません。説明してくれませんか?

4

1 に答える 1

1

stdout がフラッシュされる前に SEGV によって強制終了されたプロセスによって印刷されたと思います。追加してみてください:

fflush(stdout);

printf ステートメントの後。

于 2012-05-05T19:16:46.257 に答える