2015-07-20 58 views
0

我有一个程序,分为多个文件,并包含很多包含数组,指针,结构和不包含的代码。该程序如何在最后一行(返回0;)后崩溃?

为了说明问题:这些是我的main()方法的最后一行;

... 
    printf("\nLast line!"); 
    return 0; 
} 

我编这个程序没有警告后,我执行它,在我的控制台我得到的文本:Last line!在我的CMD和程序崩溃(不响应)之后。

我经常使用printf()来调试我的代码,并确定程序崩溃的代码行。在这种情况下,我无法将我的头围绕在程序最后一行之后程序崩溃的事实中。

我的问题:

  • 可在主要功能return 0;导致崩溃?
  • 是否有可能由于我的程序中的早先未定义的行为而导致程序崩溃?
    • 如果是这样,我该如何调试我的代码? (我使用的是Windows 7)

注:我知道肯定只有一个printf("\nLast line!");在我的代码。

+2

“_And是有可能的程序崩溃是由于早期在我的计划不确定的行为_?” - - **是**。谷歌“返回statement_中的_segmentation错误”,你会发现很多结果。 –

+0

@CoolGuy好的,所以现在我必须找到它:) – moffeltje

+2

唉:“编译这个程序没有警告”只意味着你的程序不包含语法错误。逻辑错误,例如覆盖您不拥有或被零除的内存,不会导致编译器警告或错误。 – usr2564301

回答

3

可能return 0;main()函数导致崩溃?

至于单独的声明,不,这不会造成崩溃

是否有可能由于在我的程序中的未定义的行为程序崩溃?

是的。最可能的是这样。您在代码早些时候在某处调用了undefined behaviour,如您所知,结果未定义。

如果是这样,我该如何调试我的代码?

尝试通过调试器和内存检查运行您的程序,如gdb在Linux和Valgrind的。此外,还可以在代码中添加断点棘手的区域,并在检查实际值与期望值时检查调试器。很可能,您将能够发现错误。

1

而且停止使用printf();试好调试器像(gdb)它更简单,更快速地调试C代码