Сбой назначения - PullRequest
       9

Сбой назначения

1 голос
/ 01 июня 2009

Я отлаживаю часть большого проекта в Visual Studio 2005 и шаг за шагом прошагиваю код.

int speed = this->values.speed;
int ref = this->values.ref_speed;

После перехода через первую строку values.speed имеет значение 61, но по какой-то причине скорости присваивается значение 58. После второй строки values.ref_speed имеет значение 58, но ref присваивается значение 30.

При паузе вы видите, что исходные значения на самом деле равны 61 и 58 соответственно, но сохраняемые значения отличаются.

Что вызывает такое поведение?

Ответы [ 3 ]

6 голосов
/ 01 июня 2009

Это может произойти, если определение структуры значений было изменено в заголовочном файле, а не все объектные файлы были перекомпилированы. Тогда «карта» структуры, которую использует ваш код в этом файле, может не соответствовать остальной части кода. Это может объяснить, почему одна из переменных имеет значение другой.

Или файл .pdb Visual Studio по какой-то причине не обновлялся, и Visual Studio ищет переменную в старом месте.

1 голос
/ 01 июня 2009

Сумасшедший. Есть ли вероятность, что у вас есть локальная переменная того же типа, что и this-> values, имя которой также равно values ​​(что объясняет, почему вы ссылаетесь на член через this ->)?

0 голосов
/ 01 июня 2009

Вы делаете это в режиме отладки или выпуска? Если вы делаете это в режиме релиза или при включенной оптимизации, компилятор может изменить порядок вещей для большей производительности, и это может привести к странным результатам. Это не значит, что что-то не так в реальном исполнении, но это может сбивать с толку.

...