Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отличие компиляции по F5 от Ctrl+F5, баг при компиляции по Ctrl+F5 
:(
    Опции темы
Solomon
Дата 22.8.2006, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



суть в следующем: есть поле ввода и написаная мною фция переводящая из string в double, если запускаю на выполнение программу по F5 или же просто не из кампилятора а exe файл, то все работает чудненько, но если запускаю по Ctrl+F5, она толи  в моей функции толи где выдает баг и неправильно считывает число.Моя функция перевода числа из string в double врятли глючит, так как я её уже не в одной программе использовал и нормально всегда было.
 С чего такое случается?

Это сообщение отредактировал(а) Solomon - 22.8.2006, 15:09


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
MAKCim
Дата 22.8.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



хоть бы компилятор сказал какой
или код привел


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Solomon
Дата 22.8.2006, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Кода Оч много. Если бы я знал в каком оно месте глючит. Кампилятор Studio NET 2000

Добавлено @ 15:22 
вот сама моя корявенькая функция smile

Код

double char_array_to_double(char word[])
 {
  int number=0;
   int minuse=0;
   int do_point=0;
   int posle_point=0;
   bool point=false;

    for(int i=0;i<7;i++)
    {
      if((word[i]!=100)&&(word[i]!=0))
          number++;
    }

   for(int i=0;i<number;i++)
    {
     if(word[i]=='.')
         point=true;
     if(point==false&&word[i]!='.')
         do_point++;
     if(point==true&&word[i]!='.')
         posle_point++;
    }
        if(word[0]=='-')
            {
            //posle_point++;
             minuse=1;         
            }

     
    double figure=0;

    char *f,*f1;
    f=new char [do_point];
   
    if(minuse==0)
        {
         for(int i=0;i<do_point;i++)
         f[i]=word[i];           
        }
    else
        {
         for(int i=0;i<do_point;i++)
         f[i]=word[i+1];
        }

    figure=atoi(f);

    delete f;

    double temp=0;
    f1=new char [posle_point];
    int j=0;

    for(int i=number-posle_point;i<number;i++)
        {
            f1[j]=word[i];
            j++;         
        }

    temp=atoi(f1);

    temp=temp/pow(10,posle_point);

    delete f1;
    figure+=temp;

    if(word[0]=='-')
        figure*=-1;

    return figure;
 }



--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
Earnest
Дата 22.8.2006, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(Solomon @  22.8.2006,  16:18 Найти цитируемый пост)
 Если бы я знал в каком оно месте глючит. 

На то отладчики есть.


--------------------
...
PM   Вверх
Solomon
Дата 22.8.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



В том то и дело. когда по F5 запускаеш и пытаешся найти ошибку все работает отлично ))


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
MAKCim
Дата 22.8.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



может так
Код

double string2double(char* str)
{
    char* point=strtok(str,".");
    double osn_ss=1.0, ret=0.0;
    if (point==NULL)
        offset=strlen(str);
    else offset=point-str;
    while (--offset) osn_ss*=10.0;
    while (*str)
    {
        if (*str!='.') ret+=(*str-48)*osn_ss;
        osn_ss/=10.0;
        ++str;
    }
    return ret;
}


Это сообщение отредактировал(а) MAKCim - 22.8.2006, 15:44


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Solomon
Дата 22.8.2006, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Да не в этом вопрос. Меня интересует, почему когда запускаеш exe или по Ctrl+F5 то все нормально, а когда по F5 то баг?


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
MAKCim
Дата 22.8.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



ты определись потому как
Цитата

почему когда запускаеш exe или по Ctrl+F5 то все нормально, а когда по F5 то баг?

Цитата

но если запускаю по Ctrl+F5, она толи  в моей функции толи где выдает баг



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Solomon
Дата 22.8.2006, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Блин я уже запарился  smile 

exe и F5 - нормально
Ctrl+F5  - баг


--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
UnrealMan
Дата 22.8.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(Solomon @  22.8.2006,  15:49 Найти цитируемый пост)
Меня интересует, почему когда запускаеш exe или по Ctrl+F5 то все нормально, а когда по F5 то баг? 

Возможно, где-то происходит выход за границы массива или использование невалидного указателя, или использование неинициализированного значения и т.д. Такого рода ошибки могут проявляться в одних случаях и не проявляться в других – как повезёт.

Взгляни-ка в свой код:
Код
f=new char [do_point];

if(minuse==0)
    {
    for(int i=0;i<do_point;i++)
    f[i]=word[i]; 
    }
else
    {
    for(int i=0;i<do_point;i++)
    f[i]=word[i+1];
    }
figure=atoi(f);

Обрати внимание на то, что atoi ожидает строку, оканчивающуюся нулевым символом. Позаботился ли ты о том, чтобы строка f гарантированно оканчивалась нулевым символом (причём сразу после последовательности циферок)?

PM MAIL   Вверх
GremlinProg
Дата 22.8.2006, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



по Ctrl+F5 запускается чистый exe'шник, т.е. это то же самое, что запустить готовый exe'шник из шела. Если в проге ошибки, то exe'шник только в самой критической ситуации выдаст сообщение об отправке Microsoft отчета об ошибке, в остальных - система проглотит мелкие баги. А в среде по F5 контролируются все, даже самые мелкие косяки. И это есть гут, потому что ты всегда будешь знать о недостатках программы, которые нужно исправить.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Daevaorn
Дата 22.8.2006, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(GremlinProg @  22.8.2006,  22:23 Найти цитируемый пост)
 в остальных - система проглотит мелкие баги

Это как? Можно поподробней?
PM MAIL WWW   Вверх
GremlinProg
Дата 22.8.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 3
Всего: 106



например, выход за границы массива в стеке, использование неинициализированных переменных, запись по резервированному адресу, но находящимся за пределами выделяемого блока(только если нет повреждения самой кучи). Много чего еще есть, на что система прикрывает глаза до поры до времени.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Solomon
Дата 22.8.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 471
Регистрация: 23.1.2006
Где: Украина Киев

Репутация: нет
Всего: 2



Цитата(GremlinProg @  22.8.2006,  20:23 Найти цитируемый пост)
по Ctrl+F5 запускается чистый exe'шник, т.е. это то же самое, что запустить готовый exe'шник из шела

Так ведь именнно при Ctrl+F5 баг, а когда просто exe то нормадьно  smile

Добавлено @ 22:15 
Цитата(Solomon @  22.8.2006,  14:49 Найти цитируемый пост)
Да не в этом вопрос. Меня интересует, почему когда запускаеш exe или по Ctrl+F5 то все нормально, а когда по F5 то баг?

Я так понял, что всех сбило с толку это сообщение  в котором я запарился. я же ниже написал что ошибся и наоборот

Цитата(Solomon @  22.8.2006,  15:09 Найти цитируемый пост)
exe и F5 - нормально
Ctrl+F5  - баг




--------------------
Если не идти до конца к поставленным целям и не пытатся их достигнуть, каким бы тяжелым не казался путь, то лучше и не ставь их перед собой, но тот кто не ставит перед собой труднодоступные цели, никогда не ощутит эйфорию настоящей победы... победы над миром...
Соломон 2008
PM MAIL ICQ GTalk YIM   Вверх
UnrealMan
Дата 22.8.2006, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 27
Всего: 32



Цитата(GremlinProg @  22.8.2006,  21:23 Найти цитируемый пост)
А в среде по F5 контролируются все, даже самые мелкие косяки. 

Цитата(GremlinProg @  22.8.2006,  21:37 Найти цитируемый пост)
например, выход за границы массива в стеке

Да ну? Ну-ка попробуй вот такое запустить в отладчике:

Код
#include <iostream>

struct Struct
{
    int arr1[5];
    int arr2[5];
};

int main()
{
    Struct s = {0};
    *(s.arr1+7) = 666;
    for (int i=0; i<5; ++i)
        std::cout<<s.arr1[i]<<" "<<s.arr2[i]<<"\n";
}

Что получится?

Цитата(GremlinProg @  22.8.2006,  21:23 Найти цитируемый пост)
 потому что ты всегда будешь знать о недостатках программы, которые нужно исправить.

Увы, это не так.

Добавлено @ 22:29 
Цитата(Solomon @  22.8.2006,  22:12 Найти цитируемый пост)
Я так понял, что всех сбило с толку это сообщение  в котором я запарился. я же ниже написал что ошибся и наоборот

Всё равно это, вероятно, не имеет никакого значения. Лучше ищи ошибки в коде.

Это сообщение отредактировал(а) UnrealMan - 22.8.2006, 22:28
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0576 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.