![]() |
|
|
![]()
|
|
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Есть проблема с stl::map, со следующими переменными:
map<CString,int> typesMap; int total; Выполняется такой код: typesMap["JPEG"]=IDC_CHECK_JPEG; typesMap["PNG"]=IDC_CHECK_PNG; typesMap["GIF"]=IDC_CHECK_GIF; total = typesMap.size(); После этого шага смотрю в дебаггере total - там лежит что-то семизначное. Скажите, где я облажался ? |
|||
|
||||
| smoke_man |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 447 Регистрация: 25.1.2007 Где: Рязань Репутация: нет Всего: 17 |
size() возвращает количество элементов в контейнере.
Этот код отработал корректно в переменной total было значение 3
-------------------- 0x2b|~0x2b |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
||||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Fazil6, в дебаге оптимизация обычно выключена!
elterrible, если код работает корректно то все ок. Но использования map для 3-х элементов, по крайней мере не адекватно -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Всем спасибо за ответы.
Мап действительно в порядке, непонятным осталось следующее: 1) в каких ситуациях дебаггер может писать подобную лажу в value ? 2) есть ли способ заставить его отображать корректные значения ? |
|||
|
||||
| Fazil6 |
|
||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
шо Вы говорите... А помидоры обычно красные. А зимой обычно снег.
дебагер пишет то, что он видит.
попробуй так
|
||||||
|
|||||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Fazil6, не помогает.
Непонятен принцип, переменная не инициализируется из-за того что не используется ? |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Fazil6, ты приколист, думешь поледняя строчка total; избежит оптимизатора и решит все проблеммы
elterrible, ты проект как релиз или как дебаг собираешь? -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Peter |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 28.7.2003 Где: Ставрополь Репутация: нет Всего: 1 |
Слишком мало кода приведено. Могу его дополнить так, чтобы в total сидело значение миллион.
Внутреннему total будет присвоено значение 3, но сразу после выполнения этой команды дебаггер перепрыгнет на строку с printf(). Там внутренний total уже окажется уничтоженным, а виден будет только внешний. -------------------- всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23). |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
||||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
Да запросто, если ее значение не нужно, то кому нафиг нужна эта переменная, оптимизатор может вообще и переменную убрать. Сделай вывод переменной в консоль или файл - результат должен измениться.
вполне может и решить, но давать гарантии я бы на это не стал. Все таки по поводу оптимизаторов никаких гарантий нет, у разных компиляторов он работает по разному. Это сообщение отредактировал(а) azesmcar - 19.8.2009, 11:57 |
||||
|
|||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Rapalex, как релиз. Это отражается на чем то ?
azesmcar, добавил printf("%i", total); - ничего не изменилось. Теряюсь что еще попробовать ? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
elterrible
В каком смысле не изменилось? printf выводит семизначное число? Что-то мне не верится..покажи ка весь код. Добавлено через 2 минуты и 13 секунд Да..и еще, поскольку это Visual Studio сделай полный ребилд проекта..есть такая бага в студии. |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
elterrible, ты тоже приколист.
Когда проект полностью отлажен и готов к передаче клиенту он собирается как релиз. А когда отлаживаеш проект нужно собирать в дебаге, это какбы из названия понятно Разница между дебагом и релизом обсуждалась очень, очень, очень много рас!!! Можешь по форуму поискать, почитать. А в данном простом случае с одной переменной в релизе, вышло следующее: Ты отладчике смотришь и видишь в её значении мусор, а если ты её выведешь в консоль то увидишь её реальное значение. Это потому что в релизе НЕТ отладочной информации, а также включена оптимизация! Это ко всем: ветка форума называется "Visual C++/MFC/WTL" следовательно тут рассматривается единственный компилятор от микрософта. И на последок, у меня VS2008+SP1 и этот код не компилится -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
прям как солнце из-за туч.... Только, возможно, для тебя будет сюрпризом, что релиз вполне можно собирать с отладочной информацией 6 строк кода собрать не можешь и хвастаешься? |
|||
|
||||
| Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 6 Всего: 8 |
Не у меня не получается, а компилятор не может шаблон сгенерить. А ты сам та собрал?
Нет для меня это не будет сюрпризом, я релизы именно так и собираю. Я говорю о ситуации рядового пользователя которая складывается "по умолчанию", а ты такой шибко умный, на всё свои неуместные если вставляешь, на кого-то впечатление хочешь произвести? Мало ли как что можно накрутить в настройках, там можно и дебаг с релизом поменять местами, и что? будеш всем доказывать что ты в релизе отлаживаешь? Тут человек не знает разницы между бебагом и релизом, сомневаюсь что он будет настройки наугад ставить. Добавлено через 3 минуты и 30 секунд elterrible, я уже говорил, и поэтому повторюсь, для 3-х элементов не целесообразно создавать ассоциативный массив, со сложной структурой. Поставь 3 оператора if и всего та. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 3 Всего: 60 |
Я что-то не понял... Твои, значит, уместные, а я у тебя модерировать свои посты должен? Насколько я помню именно ты меня поправлять начал. Потвоему, все что не совпадает с твоей ТЗ тут неуместно?
ну так "по умолчанию" как раз отладочная информация есть в релизе. Удачи. |
|||
|
||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
azesmcar, совсем тупой вопрос, где можно посмотреть вывод этого printf ? Приложение то визуальное.
Я имел в виду только что в дебаггере показания не изменились. Rapalex, переключил обратно в дебаг моду, вылетают "debug assertion failed", пока разбираюсь. Насчет использования мапа - мягко говоря спорное утверждение. Какие аргументы ? |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
хм. я думал консоль..ну тогда MessageBox покажи, либо в файл выведи, но вобщем-то хотелось бы сперва посмотреть на весь код, еще, попытайся локализировать проблему. Выдели неработающую часть в отдельный проект, так легче будет разобраться. Ну и тут покажи. |
|||
|
||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
azesmcar, в мессадж боксе все в порядке (т.е. "3"). Так что тут наверно нечего уже локализовывать, код видимо выполняется правильно, непонятно почему в дебаггере такие значения. Избавлюсь от assertion failed - попробую в дебаг моде.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
elterrible, тебе правильно сказали, что в релизе бесполезнго смотреть переменные в "отладчике" - там в 50% или больше ерунда.
Вывод в отладочную консоль (output) можно сделать с помощью TRACE в дебаге или OutputDebugString в релизе. Но скорее всего, в дебаге значения переменных станут нормальными. Так что разбирайся с ассертом (ктати, он ведь сам тебе показывает, где проблема). Fazil6, Rapalex, кончайте склоку. Как две бабки, ей богу. -------------------- ... |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 2 Всего: 211 |
||||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
azesmcar, да, извини,замечание относится к Rapalex'у.
Сейчас поправлю. -------------------- ... |
|||
|
||||
| elterrible |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 17.5.2008 Репутация: нет Всего: нет |
Earnest, как всегда в точку. В дебаг моде все отлично.
Всем спасибо за ответы. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |