Visual Studio 2005 C++ не изменяются значения переменных
От: Аноним  
Дата: 24.01.08 02:11
Оценка:
Проблема в следующем:
при попытки изменить значение переменной типа char, значение не изменяется:

char s[255];
...
обработа
...
s[1] = 50;

если переменную объявить в функции то не меняется значаение переменной, смотрю по отладчику.
если глобальную сделать, то всё ок.
Также не меняют значения int переменные..

На коротких программах всё ок.
А если выростают, то начинаются бока.

Кажется что-то с памятью...


Может кто-то сталкивался с такой проблемой?
Re: Visual Studio 2005 C++ не изменяются значения переменных
От: dcb-BanDos Россия  
Дата: 24.01.08 06:35
Оценка: -1
Здравствуйте, Аноним, Вы писали:

А>Проблема в следующем:

А>при попытки изменить значение переменной типа char, значение не изменяется:

А>char s[255];

А>...
А>обработа
А>...
А>s[1] = 50;

А>если переменную объявить в функции то не меняется значаение переменной, смотрю по отладчику.

А>если глобальную сделать, то всё ок.
А>Также не меняют значения int переменные..

А>На коротких программах всё ок.

А>А если выростают, то начинаются бока.

А>Кажется что-то с памятью...



А>Может кто-то сталкивался с такой проблемой?


Быть того не может.
Возможные причины:
-не то смотришь под отладчиком
-проект release вмеcто debug
-rebuild all
-какая-нибудь супер-бета версия VS2005, в чем очень сомневаюсь
-кривизна рук
-кривизна мозга.
Ничто не ограничивает полет мысли программиста так, как компилятор.
Re: Visual Studio 2005 C++ не изменяются значения переменных
От: Аноним  
Дата: 24.01.08 08:03
Оценка:
Здравствуйте, Аноним, Вы писали:

А>если переменную объявить в функции то не меняется значаение переменной, смотрю по отладчику.

Снести башню отладчику можно следующим образом:

// global
int X=0;

void Foo()
{
  // local
  int X=1;

  ++X;
}
Re[2]: Visual Studio 2005 C++ не изменяются значения перемен
От: Аноним  
Дата: 24.01.08 20:52
Оценка: :))
Здравствуйте, dcb-BanDos, Вы писали:

DB>Здравствуйте, Аноним, Вы писали:


А>>Проблема в следующем:

А>>при попытки изменить значение переменной типа char, значение не изменяется:

А>>char s[255];

А>>...
А>>обработа
А>>...
А>>s[1] = 50;

А>>если переменную объявить в функции то не меняется значаение переменной, смотрю по отладчику.

А>>если глобальную сделать, то всё ок.
А>>Также не меняют значения int переменные..

А>>На коротких программах всё ок.

А>>А если выростают, то начинаются бока.

А>>Кажется что-то с памятью...



А>>Может кто-то сталкивался с такой проблемой?


DB>Быть того не может.

DB>Возможные причины:
DB>-не то смотришь под отладчиком
DB>-проект release вмеcто debug
DB>-rebuild all
DB>-какая-нибудь супер-бета версия VS2005, в чем очень сомневаюсь
DB>-кривизна рук
DB>-кривизна мозга.

Смотрю то.
Проект release, чтоб быть уверенным как будет работать в финале. (Если можно объясните почему лучше использовать debug во время отладки).
VS2005 8.0.50727.42
Может и кривизна рук...

Пишу BHO, создаю COM объект с помощью ATL. Переменные внутри класса объявленые некоторые не хотят изменятся, некоторые изменяются, не важно какого типа и private или public. Переменные к которым получаю доступ первым в процессе программы нормально изменяют значения. Которые позже не хотят менять. Возможно-ли ограничение памяти на COM объект?

С проблемой справился определив вне класса КОМ объекта переменные.
Re[3]: Visual Studio 2005 C++ не изменяются значения перемен
От: said222  
Дата: 24.01.08 21:03
Оценка:
Здравствуйте, Аноним, Вы писали:


А>Смотрю то.

А>Проект release, чтоб быть уверенным как будет работать в финале. (Если можно объясните почему лучше использовать debug во время отладки).

Release не содержит отладочной информации. Дебагер может показать все-что угодно.
Re: Visual Studio 2005 C++ не изменяются значения переменных
От: rg45 СССР  
Дата: 24.01.08 22:31
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Проблема в следующем:

А>при попытки изменить значение переменной типа char, значение не изменяется:

А>char s[255];

А>...
А>обработа
А>...
А>s[1] = 50;

А>если переменную объявить в функции то не меняется значаение переменной, смотрю по отладчику.

А>если глобальную сделать, то всё ок.
А>Также не меняют значения int переменные..

А>На коротких программах всё ок.

А>А если выростают, то начинаются бока.

А>Кажется что-то с памятью...



А>Может кто-то сталкивался с такой проблемой?


То, что под отладчиком ты видишь изменение глобальных переменных но не видишь изменения локальных, наводит на мысль, что ты отлаживаешь код, сгенерированный с включенной опцией оптимизации кода. В этом режиме мало смысла отлаживаться, поскольку сгенерированный код может катастрофически не совпадать с исходным тесктом программы. Значения каких-то ЛОКАЛЬНЫХ переменных переменных компилятор может не изменять, а проделать вместо этого вычисления в регистрах процессора. Да что там говорить, компилятор при включенной опции оптимизации вообще может не сгенерировать никакого кода, если увидит, что этот код не имеет никакого эффекта, обнаруживаемого за пределами функции. Одним из таких эффектов может быть изменение глобальных переменных. Поскольку к глобальным переменным могут быть обращения из других единиц трансляции, копилятор уже не может проигнорировать инструкции, модифицирующие глобальные переменные (так, как он поступал в случае с локальными переменными). Поэтому изменение значений глодальных переменных ты видишь в отладчике а локальных нет. Для обнаружения ошибки тебе нужно скомпилировать программу в отладочной конфигурации (Debug) и трассировать выполнение программы в этом режиме.
... << RSDN@Home 1.2.0 alpha rev. 787>>
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[2]: 2 SomeOne_TT
От: dcb-BanDos Россия  
Дата: 25.01.08 06:44
Оценка:
Здравствуйте, dcb-BanDos, Вы писали:

с чем не согласен?!

по делу:
как уже верно сказали стандартная ситуация, если имя какой-либо глобальной переменной равно имени просматриваемой в отладчике локальной переменной.
второй вариан:

    int i=0;
    for (int i=0;i<100;++i)
    {
        int h=0;
    }
    cout << i;


на строчке cout... в отладчике i=100.

Посоветовать могу одно — попробуй писать в лог, то что нужно проверить или все-таки переключи версию на debug, либо убери в release оптимизацию и выставь в Debug information format — Program Database( Ключ /Zi)

я думаю таких примеров еще куча, был бы код, было б виднее...
Ничто не ограничивает полет мысли программиста так, как компилятор.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.