наборы битов в C ++ с использованием VS2010 (другое) - PullRequest
3 голосов
/ 04 августа 2011

Я только что задал другой вопрос о наборах битов, который, как оказалось, является ошибкой в ​​VS2010 наборов битов в C ++ с использованием VS2010

Однако после изменения конструктора, который я использовал для набора битов, который я запустилв другую проблему (как описано в редактировании другого вопроса)

При использовании конструктора по умолчанию для набора битов он не инициализируется нулями, а вместо этого устанавливается на

[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() будет вызван

1 Ответ

0 голосов
/ 05 августа 2011

Решено

У меня есть этот массив (обратите внимание на индекс)

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

Это в моем списке назначений (обратите внимание на индекс)

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

Кажется, я только что усвоил урок

...