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

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

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

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

switch (static_cast<int>(pal))

pal - имеет тип double
может кто сталкивался с подобной проблемой?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2014, 10:32
Ответы с готовыми решениями:

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

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

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

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

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

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
Эксперт С++
5044 / 3105 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.01.2014, 11:24 4
МихаилХ, как получается значение bit? Оно зависит от значений других переменных? Как получаются эти значения? И так до самого верха иерархии.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 11:37  [ТС] 5
Значение bit имеет диапазон от 0 до 1. От других переменных никак не зависит, это значение я получаю скажем так от "прибора" подключенного к компу. Значение нигде не обрабатывает и никаких операций с этим значением не происходит. Т.е. я передал в ф-ю например 0.9465784 умножил на 5 получил 4.скопейками а switch вместо 4 выбирает 5, а в другой программе все нормально. Я ответил на вопрос или нет?))
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 11:39  [ТС] 6
в переменной может быть число bit от 0 до 1.
0
Эксперт С++
5044 / 3105 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.01.2014, 11:59 7
Цитата Сообщение от МихаилХ Посмотреть сообщение
Я ответил на вопрос или нет?))
Ответили. Не подумайте, что я придираюсь, просто чем больше информации о контексте имеется, тем больше вероятность, что удастся найти ошибку.
Пробовали выводить значения всех зависимых для pal переменных в дебаге и релизе? Ни на какой стадии не получается так, что значение должно быть одно, а получается другое? (Уверен, что на каком-то этапе либо в дебаге, либо в релизе такое наблюдается, другой вопрос - почему?)
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 12:25  [ТС] 8
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не подумайте, что я придираюсь, просто чем больше информации о контексте имеется, тем больше вероятность, что удастся найти ошибку.
На самом деле я так даже и не думал просто этим вопросом , на самом деле, я хотел уточнить полон ли мой ответ)
По теме: пробовал и в релизе и в дебаге. Значения поступают приблизительно одинаковые на всем диапазоне. Проблема, как мне кажется, не в числах так как до switch числа доходят одни и те же а в релизе при одних и тех же значениях switch делает разный выбор. К примеру пришло на switch 4.834657: в дебаге выбирается case 4: а в релизе case 5:. Просто в другой программе и в дебаге и в релизе все работает одинаково.
0
Эксперт С++
5044 / 3105 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.01.2014, 12:53 9
МихаилХ, погодите, а вы результат static_cast'а выводили?
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:07  [ТС] 10
Вот где собака то зарыта) Водной программе static_cast возвращает не 4 а 5.
0
Эксперт С++
5044 / 3105 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.01.2014, 13:11 11
МихаилХ, это при значении pal меньше 5? Это ненормальное поведение, дробная часть должна отбрасываться.
0
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:17  [ТС] 12
Да, почему то при значении pal меньше 5 static_cast возвращает 5. Причем и int(pal) тоже 5 возвращает.

Добавлено через 2 минуты
Это может от настроек проекта как то зависеть?
0
Эксперт С++
5044 / 3105 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
10.01.2014, 13:20 13
МихаилХ, на счёт проектов не знаю, знаю, как должно быть по стандарту.
1
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 74
10.01.2014, 13:23  [ТС] 14
Пора создавать новую тему))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.01.2014, 13:23

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Вывести символ из масива ASCII в debuge
Помогите! Вывести на екран символ без ссуву курсора, указав його номер в масиве кoдов ASCII C...

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.