私は学士の学生です、私はこの質問を私のインストラクターが求めています。 私はすでにそれについてグーグルをしていましたが、私はまだ混乱しています。main()の実行に達する前に起動時にクラッシュし、問題が存在する可能性があるC++コードがありますか?
クラッシュの原因を見つけ出すツールはありますか?
本当にありがとうございます。
私は学士の学生です、私はこの質問を私のインストラクターが求めています。 私はすでにそれについてグーグルをしていましたが、私はまだ混乱しています。main()の実行に達する前に起動時にクラッシュし、問題が存在する可能性があるC++コードがありますか?
クラッシュの原因を見つけ出すツールはありますか?
本当にありがとうございます。
実際の実行が開始される前にいくつかのことが起こります。私の頭に浮かぶ最初のことは、グローバル変数の初期化です。たとえば:
#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;
}
そして、このようなバグを見つける方法のご質問について、答えは:デバッガを使用します。
ちょうど明確にする - このコードは、メイン – pm100
の前にクラッシュしない実際に私は確かに... – user463035818
@ pm100は、メインの開始前に初期化されていないグローバル変数ですか? – user463035818
@ 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 */
}
はい - これはデバッガと呼ばれます。あなたはどんなプラットフォームにいますか – pm100
いくつかのコードをお願いします。また、DEBUGを使って自分で見つけることもできます。 – Ajay
@Ajay基本的にインタビューの質問で、基本的な起動前にクラッシュする可能性のあるコード例を質問しました – user463035818