2016-04-27 12 views
0

私は学士の学生です、私はこの質問を私のインストラクターが求めています。 私はすでにそれについてグーグルをしていましたが、私はまだ混乱しています。main()の実行に達する前に起動時にクラッシュし、問題が存在する可能性があるC++コードがありますか?

クラッシュの原因を見つけ出すツールはありますか?

本当にありがとうございます。

+0

はい - これはデバッガと呼ばれます。あなたはどんなプラットフォームにいますか – pm100

+0

いくつかのコードをお願いします。また、DEBUGを使って自分で見つけることもできます。 – 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

@ tobi303と同様に、グローバル変数はmainより前に初期化されます。

グローバル変数の1つがオブジェクトである場合、そのオブジェクトのコンストラクタはmainの前に実行されます。

コンストラクターが他の関数を呼び出す場合は、これらの関数もmainの前に呼び出されます。

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

SelfCrashing myGlobal; // Default Constructor called 

int main() 
{ 
    /* Program never got here */ 
} 
関連する問題