1

与えられたのは、次の要素を持つクラスです。

std::array<Class*, 4> children;

デバッグ モードで、初期化されていない配列の要素をチェックすると、 がnullptr返されますtrue

if(children[0]==nullptr)

ただし、リリース モード (O1、O3、または Os に関係なく、最適化が有効になっている) では、チェックは を返しますfalse

要素は何らかの方法で初期化されているようですが、それらにアクセスするとセグメンテーション違反が発生します。この動作を回避するには、std::arraywithnullptr要素を明示的に初期化する必要があります。

std::array<Class*, 4> children{{nullptr}};

これはなぜですか?

編集:この場合に使用されるコンパイラはApple LLVM 4.2 (Xcode 4.6.3).

4

4 に答える 4

0

Visual は、初期化されていないメモリにマジック ナンバーを設定する場合があります。とにかく、初期化されていないメモリを明らかにテストすることはできません

于 2013-09-02T17:17:56.107 に答える