我正在做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.
“分段错误”声明之前没有“ss”。我无法理解为什么。你能帮我解释一下吗?
答案 0 :(得分:1)
我认为它是通过在stdout冲洗之前被SEGV杀死的进程打印出来的。尝试添加:
fflush(stdout);
在printf声明之后。