与gcc4.2.1无法解释的错误(Segm.fault 11)

时间:2012-03-24 13:04:36

标签: c gcc

我有一个真正简单程序,但它不起作用。此外,它让我对程序的流程产生了严重怀疑。

程序是这样的(假设有必要的标题):

main(){
printf("hello1");
printf("hello2");
somefunction();
}

输出至少是特殊的:它只返回第一个printf(hello1),之后程序立即退出并出现错误“Segmentation fault 11”。 然而,如果我删除'somefunction()',则第二个printf 显示。

我的意思是,如果我的'somefunction()'出现问题,第二个printf()应该无论如何显示。

3 个答案:

答案 0 :(得分:5)

你的somefunction做了一些令人讨厌的事情,并且在printf有机会刷新缓冲区之前该进程被终止。你可以尝试:

printf("hello1");
printf("hello2");
fflush(stdout);
somefunction();

答案 1 :(得分:2)

stdout是行缓冲的。这意味着您的输出缓存在某个地方以便稍后打印,但由于您somefunction崩溃,因此无法打印它们。

您可以使用fflush

刷新缓冲区
fflush(stdout);

或者,打印一个新行:

main(){
    printf("hello1\n");
    printf("hello2\n");
    somefunction();
}

答案 2 :(得分:0)

一般情况下,除非您确切知道自己在做什么,否则应始终在打印语句的末尾添加\n。这将确保语句实际上使其成为输出。

printf("hello1\n");
printf("hello2\n");
somefunction();