Visual Studio 2010 Watch — неправильные значения

У меня есть следующий фрагмент кода

fscanf( fSettings, "%s", szLine );
bool x = separateBool   ( szLine );
gSettings.useBE = x;

szLine содержит useBE=1, x установлен в true и часы VS2010 Pro видят это. Однако после присвоения значения gSettings.useBE в последней строке значение gSettings.useBE все еще виден как ложный! Я понятия не имею, как это происходит. VS2010 SP1 установлен. Большое спасибо за любой вклад.

Смотреть VS 2010

Редактировать:
Отдельным элементом является следующая функция:

  inline
bool separateBool( const char * szStr )
{
std::vector<std::string> res = split(szStr, '=');
if ( res.size() < 2 )
;  /* error */
return (str2int( res[1] ) == 1 );
};

Игрушечная версия «алгоритма»

bool a = false;
bool b = false;
b = separateBool    ( szLine );
a = b;
a = separateBool    ( szLine );

все делает правильно.

0

Решение

Ваша программа присваивается gSettings.useBE дважды, поэтому нет причин для тревоги, потому что это видно с двумя разными значениями.

Так как мы не знаем что separateBool действительно, мы должны догадаться.

Если бы мне пришлось угадывать, separateBool имеет подпись как bool *(char**) и эта семантика — прочитать один параметр из строки и обновить аргумент, чтобы он указывал на следующий параметр.

Если мое предположение верно, следствием будет то, что второй вызов либо найдет параметр, который оценивает false или не находит параметр или какое-либо другое условие, которое вызывает separateBool возвращать false,

0

Другие решения

Изменение Struct Member Alignment в Properties->C/C++->CodeGeneration в 4 байта из оригинала 8 байт делает трюк. Но я до сих пор понятия не имею, почему …

0

По вопросам рекламы [email protected]