2015-07-20 83 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代碼