2016-04-27 27 views
0

我是學士學位,我的導師問我這個問題,你可以幫我解決這個問題。 我已經做了Google搜索,但我仍然困惑。我有一個C++代碼,在執行main()之前在啓動時崩潰,問題可能出現在哪裏?

有沒有找到崩潰原因的工具?

我真的很感激你的時間。

+0

是 - 它被稱爲調試器。你在什麼平臺上 – pm100

+0

有些代碼請。或者,您也可以調試並自己找出它。 – Ajay

+0

@Ajay這是一個面試問題,基本上要求一個代碼示例,可以在主啓動前崩潰 – user463035818

回答

2

在實際執行開始之前有幾件事發生。我想到的第一件事是全局變量的初始化。例如:

#include <cstdlib> 

int getSomeValue(){ 
    // some code to produce crash, e.g. as suggested by Barmar... 
    abort(); 
    return 0; 
} 

int value = getSomeValue(); 

int main(){ 
    return 0; 
} 

而關於如何找到這樣的錯誤的問題,答案是:使用調試器。

+0

只是要清楚 - 這個代碼不會崩潰之前,主要 – pm100

+0

實際上我不太確定... – user463035818

+0

@ pm100但沒有全局變量初始化之前主要啓動? – user463035818

0

As @ tobi303表示全局變量在main之前被初始化。

如果其中一個全局變量是一個對象,那麼該對象的構造函數會在main之前運行。

如果該構造函數調用其他函數,那麼在main之前也會調用這些函數。

class SelfCrashing 
{ 
public: 
    SelfCrashing() { int x = *(int*)NULL; } // Deliberate crash 
}; 

SelfCrashing myGlobal; // Default Constructor called 

int main() 
{ 
    /* Program never got here */ 
}