Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74

Программа работает по разному в Debug'e и Release'e

10.01.2014, 10:32. Показов 2645. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый День! Суть проблемы: есть две программы адекватно работающие в debug'e но в release'e есть проблемы. В коде программ используется один и тот же файл .срр и соответственно одинаковый код. В этом коде есть switch который в этих программах работает по разному. При одних и тех же значениях параметра switch в одной программе производится выбор case4 а в другой case5. Вот огрызок кода:

switch (static_cast<int>(pal))

pal - имеет тип double
может кто сталкивался с подобной проблемой?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.01.2014, 10:32
Ответы с готовыми решениями:

Программа работает по-разному на разных компах
Дали задание на написание небольшой программы в С++, работа с массивами. На домашнем компе работает правильно, всё выполняется. ...

Программа без отладчика и с ним работает по-разному
Здравствуйте. Помогите разобраться со следующей проблемой: Програмка на ассемблере (по вводу в регистр ax десятичного числа) работает...

Программа работает по-разному в VS 2008 и в Code::Blocks
Помогите разобраться! Пишу алгоритм преобразования мировых координат в координаты камеры. Пишу в VS 2008. На определенном этапе...

13
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 11:10
А код что, сверхсекретный, выложить полностью кусок никак?
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 11:22  [ТС]
не секретный конечно, вот пожалуйста:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
long CDLevelIndicator::PointColor(double bit)
{
    long color;
    double pal;
 
    pal = bit*5;
    double k = 255.9;
    color = 0;
    switch (static_cast<int>(pal))
    {
    case 0:
        color=int(sqrt(pal)*k)*0x10000;
        break;
    case 1:
        color=int(sqrt(pal-1)*k)*0x100+0xff0000;
        break;
    case 2:
        color=int(sqrt(3-pal)*k)*0x10000+0xff00;
        break;
    case 3:
        color=int(sqrt(pal-3)*k)+0xff00;
        break;
    case 4:
        color=int(sqrt(5-pal)*k)*0x100+0xff;
        break;
    case 5:
        color=0xff;
    }
 
    return color;
}
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 11:24
МихаилХ, как получается значение bit? Оно зависит от значений других переменных? Как получаются эти значения? И так до самого верха иерархии.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 11:37  [ТС]
Значение bit имеет диапазон от 0 до 1. От других переменных никак не зависит, это значение я получаю скажем так от "прибора" подключенного к компу. Значение нигде не обрабатывает и никаких операций с этим значением не происходит. Т.е. я передал в ф-ю например 0.9465784 умножил на 5 получил 4.скопейками а switch вместо 4 выбирает 5, а в другой программе все нормально. Я ответил на вопрос или нет?))
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 11:39  [ТС]
в переменной может быть число bit от 0 до 1.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 11:59
Цитата Сообщение от МихаилХ Посмотреть сообщение
Я ответил на вопрос или нет?))
Ответили. Не подумайте, что я придираюсь, просто чем больше информации о контексте имеется, тем больше вероятность, что удастся найти ошибку.
Пробовали выводить значения всех зависимых для pal переменных в дебаге и релизе? Ни на какой стадии не получается так, что значение должно быть одно, а получается другое? (Уверен, что на каком-то этапе либо в дебаге, либо в релизе такое наблюдается, другой вопрос - почему?)
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 12:25  [ТС]
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не подумайте, что я придираюсь, просто чем больше информации о контексте имеется, тем больше вероятность, что удастся найти ошибку.
На самом деле я так даже и не думал просто этим вопросом , на самом деле, я хотел уточнить полон ли мой ответ)
По теме: пробовал и в релизе и в дебаге. Значения поступают приблизительно одинаковые на всем диапазоне. Проблема, как мне кажется, не в числах так как до switch числа доходят одни и те же а в релизе при одних и тех же значениях switch делает разный выбор. К примеру пришло на switch 4.834657: в дебаге выбирается case 4: а в релизе case 5:. Просто в другой программе и в дебаге и в релизе все работает одинаково.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 12:53
МихаилХ, погодите, а вы результат static_cast'а выводили?
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:07  [ТС]
Вот где собака то зарыта) Водной программе static_cast возвращает не 4 а 5.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 13:11
МихаилХ, это при значении pal меньше 5? Это ненормальное поведение, дробная часть должна отбрасываться.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:17  [ТС]
Да, почему то при значении pal меньше 5 static_cast возвращает 5. Причем и int(pal) тоже 5 возвращает.

Добавлено через 2 минуты
Это может от настроек проекта как то зависеть?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
10.01.2014, 13:20
МихаилХ, на счёт проектов не знаю, знаю, как должно быть по стандарту.
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:23  [ТС]
Пора создавать новую тему))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2014, 13:23
Помогаю со студенческими работами здесь

программа работает по-разному на одном и том жке компе??????
у меня проблема-создал на делфи прогу простую до жути вот она unit Unit1; interface uses Windows, Messages, SysUtils,...

Вывести символ из масива ASCII в debuge
Помогите! Вывести на екран символ без ссуву курсора, указав його номер в масиве кoдов ASCII C используя прерывание 10h bios

Программа отображается по разному на 7 и XP
Программа по разному отображается на 7 и XP. В чем проблема на XP ?

По разному работает QGraphicsPathItem
На работе проект делаю в ОС &quot;Заря&quot;. Там такие строки: pathItem = new QGraphicsPathItem(path,0,scene); ...

Шейдер работает по разному
Приветствую всех, у меня есть шейдер: Shader &quot;Custom/OnlyZeroWithBump&quot; { Properties { _Color...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru