简体   繁体   English

LINUX中的分段错误

[英]about segmentation fault in LINUX

I am doing a homework developing SIC/XE assembler in LINUX. 我正在做作业,在LINUX中开发SIC / XE汇编程序。

When I made a code, I confronted some error, but I do not know why this is happen. 当我编写代码时,遇到了一些错误,但是我不知道为什么会这样。 Would you explain for me why this problem occurred? 您能为我解释为什么出现此问题吗?

The code shows below reveals 'test.asm' file with token. 下面显示的代码显示带有令牌的“ 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");

According to this, especially "ss\\nss" statement, I expected printed out result like below. 据此,尤其是“ ss \\ nss”语句,我期望打印出如下结果。

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

However, when I run this program till the end, I met segmentation fault and met weird situation. 但是,当我运行该程序直到最后时,遇到分段错误并遇到了奇怪的情况。

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

There is no 'ss' before the 'Segmentation fault' statement. 在“分段故障”语句之前没有“ s”。 I can not figure why. 我不知道为什么。 Would you explain it for me please? 你能帮我解释一下吗?

I believe it's printed, by process killed by SEGV before stdout is flushed. 我相信它是按标准输出在刷新标准输出之前被SEGV杀死的进程打印的。 Try to add: 尝试添加:

fflush(stdout);

after printf statement. 在printf语句之后。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM