VS2010を使用したC ++のVS2010ビットセットのバグであることが判明したビットセットについて別の質問を しました
ただし、ビットセットに使用したコンストラクターを変更すると、別の問題が発生しました(他の質問の編集で説明されているように)
ビットセットにデフォルトのコンストラクターを使用すると、0 に初期化されず、代わりに次のように設定されます。
[8](0,0,0,0,1,1,0,1)
そして_p.to_ulong()
戻る1390560944
これがコードです
class Flags
{
private:
//List of 8 bits
std::bitset<8> _p;
public:
Flags();
}
Flags::Flags()
: _p()
{}
私も使用してみ: _p(32)
ましたが、上記と同じビットが設定されましたが、返される値to_ulong()
は1437615792
どうしたの?
編集:これはVS2010 SP1 64ビットで32ビットプログラムとしてコンパイルされています
編集2:
以下のコメントで、私は単純なプログラムでそれを再現できると言いました.
私の他のプロジェクト(私が試みているエミュレーター)では、関数ポインターのいくつかの配列に絞り込みました。値が割り当てられている場所を取り出すと、危険な動作は発生しません。これらの配列はここで確認できます
メモリアドレス指定関数が存在しないため、そのコードはコンパイルされません。それらを含めるには、他のクラスなどを多数含める必要があります。しかし、関数ポインタ配列に値を割り当てると、ビットセットの値に影響するのはなぜですか? init()
ビットセットは呼び出される前に初期化されます