gcc
への初期化されていないポインタをどうにかして初期化できますNULL
か?
職場では、 gcc 4.1.2とSun Studio 12の両方でソフトウェアを構築しています。Red Hat Enterprise Linux で実行される gcc バージョンは、数か月間、週 5 日、正常に実行されています。
ただし、Solaris バージョンをロールアウトしたばかりで、起動時に毎日クラッシュします。
スタック トレースにより、次のようなコードが表示されます。
if( _timer == NULL ) {
_timer = new Timer(bunch, of, parameters);
}
_timer->StartTimer(_timeout);
そして、_timer
どこにも初期化されていないことを確認しました。したがって_timer
、 をガベージ データに設定する必要があると考えられます。これは との比較に失敗し、タイマーが構築されることなく 'ed にNULL
なります。StartTimer
仕事は実際に私の同僚に割り当てられており、彼はこれを検証しています。しかし、その間、私は興味がありました: Linux (gcc) ビルドがクラッシュしなかったのはなぜですか? 同じコードであることは保証できます。Perforce と厳密なラベル付けを使用しています。コンパイラは初期化されていないポインタを初期化しないと読んだので、混乱しています。
初期化されていないポインターをgcc 4.1.2
絶対に自動初期化できないことを確認すると、この質問に答えることができます。または、そうかもしれません。