3

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:

以下のコメントで、私は単純なプログラムでそれを再現できると言いました.

私の他のプロジェクト(私が試みているエミュレーター)では、関数ポインターのいくつかの配列に絞り込みました。値が割り当てられている場所を取り出すと、危険な動作は発生しません。これらの配列はここで確認できます

http://pastebin.com/QyiJGzNd

メモリアドレス指定関数が存在しないため、そのコードはコンパイルされません。それらを含めるには、他のクラスなどを多数含める必要があります。しかし、関数ポインタ配列に値を割り当てると、ビットセットの値に影響するのはなぜですか? init()ビットセットは呼び出される前に初期化されます

4

1 に答える 1

0

解決した

私はこの配列を持っています(インデックスに注意してください)

void (MPU::*_STY[0x94])(BIT_8 ** pSource, const BIT_8 args[]); // STY

これは私の割り当てリストにあります(インデックスに注意してください)

_STY[0x94] = &MPU::ZeroPageX_SourceOnly;

私はちょうど私のレッスンを学んだと思います

于 2011-08-04T21:13:59.057 に答える