gcc4.2.1无法解释的错误(Segm.11故障)

gcc4.2.1无法解释的错误(Segm.11故障),c,gcc,C,Gcc,我有一个非常简单的程序,但不起作用。此外,它让我对程序的流程产生了严重的怀疑 程序如下所示(假设有必要的标题): 输出至少是奇特的:它只返回第一个printf(hello1),紧接着程序退出并出现错误“Segmentation fault 11”但是,如果我删除'somefunction()',第二个printf也会显示 我的意思是,如果我的“somefunction()”有问题,则应显示第二个printf()。您的somefunction做了一些令人讨厌的事情,并且进程在printf有机会刷新

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

程序如下所示(假设有必要的标题):

输出至少是奇特的:它只返回第一个printf(hello1),紧接着程序退出并出现错误“Segmentation fault 11”但是,如果我删除'somefunction()',第二个printf也会显示


我的意思是,如果我的“somefunction()”有问题,则应显示第二个printf()。

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

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

stdout是行缓冲的。这意味着您的输出被缓冲到某个地方,以便稍后打印,但由于您的
somefunction
崩溃,因此它没有机会打印它们

您可以使用
fflush
刷新缓冲区:

fflush(stdout);
或者,打印新行:

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

一般来说,除非您确切知道自己在做什么,否则您应该始终在打印语句的末尾添加一个
\n
。这将确保该语句实际到达输出

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

谢谢,我不知道这个。现在我可以试着调试一些函数。
printf("hello1\n");
printf("hello2\n");
somefunction();