Форум программистов, компьютерный форум CyberForum.ru

Глюк системы или кривой код? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 16:44     Глюк системы или кривой код? #1
Программа должна быть сдана уже завтра, но работать нормально она отказывается. Сделана и тестируется через VS 2008. Проблема такова:

При запуске программы в режиме "запуска без отладки" выполняет все действия, кроме нормального чтения из файла (бинарного). Есть 2 тестовых файла, один запускается (test.bin), второй - нет(test2.bin), вылетает системная ошибка, что мол приложение не отвечает и т.д.

Естественно, я начал отладку, запустил в режиме "отладки", но чудеса, программа работает как часы, и хоть 100 раз загружай второй файл, он будет загружать и считывать данные правильно.

Господа, присяжные заседатели, помогите найти проблему.


Вот такие данные об ошибке предоставляет система:

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Сигнатура проблемы:
  Имя события проблемы: APPCRASH
  Имя приложения:   kursach3.exe
  Версия приложения:    0.0.0.0
  Отметка времени приложения:   4f16bb4d
  Имя модуля с ошибкой: ntdll.dll
  Версия модуля с ошибкой:  6.1.7601.17725
  Отметка времени модуля с ошибкой: 4ec49b60
  Код исключения:   c0000005
  Смещение исключения:  00055ead
  Версия ОС:    6.1.7601.2.1.0.256.48
  Код языка:    1049
  Дополнительные сведения 1:    0a9e
  Дополнительные сведения 2:    0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:    0a9e
  Дополнительные сведения 4:    0a9e372d3b4ad19135b953a78882e789

Вот тут солюшн, там вроде основное прокомментировано все...
Вложения
Тип файла: rar kursach3.rar (3.57 Мб, 36 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
18.01.2012, 17:18     Глюк системы или кривой код? #2
скорее кривой код
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 17:29  [ТС]     Глюк системы или кривой код? #3
Цитата Сообщение от retmas Посмотреть сообщение
скорее кривой код
Спасибо за очень содержательный ответ, он мне очень помог!
Иногда лучше промолчать, да?
retmas
Жарю без масла
803 / 685 / 143
Регистрация: 13.01.2012
Сообщений: 1,580
18.01.2012, 17:34     Глюк системы или кривой код? #4
иногда лучше пробовать сначала использовать поиск, да?
-=ЮрА=-
Заблокирован
Автор FAQ
18.01.2012, 17:35     Глюк системы или кривой код? #5
Цитата Сообщение от Akkoks Посмотреть сообщение
Господа, присяжные заседатели, помогите найти проблему.
- думаю из-за этих ворнингов где то и выкидывает тебя(в Debug тебе "студия помогает", так что не особо обольщайся если в режиме отладки всё работает) Баги и проявляются через проигнорированные ворнинги(мне так первый вообще ненравится - ОЧЕНЬ, как можно писать функцию не все части которой возвращают значение???Уверен на 90% ошибка в этом)

Log Dubug-a
--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
methods.cpp
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\list.h(187) : warning C4715: 'list::search' : not all control paths return a value
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(118) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(121) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(128) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(215) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(222) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(311) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(318) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
Linking...

main.exe - 0 error(s), 8 warning(s)
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 17:41  [ТС]     Глюк системы или кривой код? #6
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- думаю из-за этих ворнингов где то и выкидывает тебя(в Debug тебе "студия помогает", так что не особо обольщайся если в режиме отладки всё работает) Баги и проявляются через проигнорированные ворнинги(мне так первый вообще ненравится - ОЧЕНЬ, как можно писать функцию не все части которой возвращают значение???Уверен на 90% ошибка в этом)

Log Dubug-a
--------------------Configuration: main - Win32 Debug--------------------
Compiling...
main.cpp
methods.cpp
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\list.h(187) : warning C4715: 'list::search' : not all control paths return a value
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(118) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(121) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(128) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(215) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(222) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(311) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
d:\ìîè äîêóìåíòû\downloads\kursach3 (1)\kursach3\kursach3\methods.cpp(318) : warning C4541: 'dynamic_cast' used on polymorphic type 'class object' with /GR-; unpredictable behavior may result
Linking...

main.exe - 0 error(s), 8 warning(s)
Если вы не заметили, то там обработка исключений, и те случаи, при которых значение не возвращается, обрабатываются исключением и игнорируются в дальнейшем, с этим полный порядок! я объяснил конкретно, что проблема в загрузке файла, мб и правда явно приведение шалит, но у меня таких ворнингов не выдает вообще... У меня только про устаревшие вызовы функций...
-=ЮрА=-
Заблокирован
Автор FAQ
18.01.2012, 17:42     Глюк системы или кривой код? #7
Предлагаю "залатать по быстрому"
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
32
33
Elem *search(int num) //ïîèñê ýëåìåГ*ГІГ* ГЇГ® ëîãèñåñêîìó Г*îìåðó
{
    int i=0;
    Elem *t=NULL;
    if(num==0) 
        return head;
    if(num==size-1) 
        return end;
    try
    {
        if(num<0||num>size-1) 
            throw "Invalid number, press any key...";
        else 
        {
            if(num!=0&&num!=size-1)
            {
            
                t=head;
                while(t!=NULL && i<num)
                {
                    t=t->next;
                    i++;
                }
                return t;
            }
        }       
    }
    catch (char *s)
    {
        cout<<s; getch(); cout<<endl;
    }   
    return t;
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
18.01.2012, 17:44     Глюк системы или кривой код? #8
Akkoks, попробовал скомпилировать через mingw. При чтении test2 и test3 виснет, при чтении test ничего не происходит(заново менюшка выводится). exe прикладываю, посмотрите, может так и должно быть.
Вложения
Тип файла: rar main.rar (126.6 Кб, 8 просмотров)
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 17:51  [ТС]     Глюк системы или кривой код? #9
Все, нашел в чем ошибка... Писал ночью и забыл кое что... во всем виноваты потоки.

C++
1
2
3
4
5
6
7
8
9
10
11
object *Int::readbin(ifstream &ifs){        // Чтение из двоичного файла
    ifs.read((char*)&date,sizeof(int)); //по глупости писал sizeof(*this);
    if (date==0) return 0;
    else  return new Int(date);
}
 
object *Float::readbin(ifstream &ifs){      // Чтение из двоичного файла
    ifs.read((char*)&date,sizeof(float)); //sizeof(*this); -ошибка
    if (date==0) return 0;
    return new Float(date);
}
Добавлено через 5 минут
Цитата Сообщение от soon Посмотреть сообщение
Akkoks, попробовал скомпилировать через mingw. При чтении test2 и test3 виснет, при чтении test ничего не происходит(заново менюшка выводится). exe прикладываю, посмотрите, может так и должно быть.
При чтении test он просто считывает и все, а там дальше нужно просматривать коллекцию)
-=ЮрА=-
Заблокирован
Автор FAQ
18.01.2012, 17:55     Глюк системы или кривой код? #10
Akkoks, уважаемый
Цитата Сообщение от Akkoks Посмотреть сообщение
Если вы не заметили, то там обработка исключений, и те случаи, при которых значение не возвращается, обрабатываются исключением и игнорируются в дальнейшем, с этим полный порядок!
- у меня к тебе вопрос, что вернёт функция если попадём в ветвь исключения в catch???На экране напишет что-то. а программа дальше как, блок вызвавший search - что в него вернёшь???Ведь после getch ни стопа для алгоритма ни exit нет.
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 18:59  [ТС]     Глюк системы или кривой код? #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Akkoks, уважаемый
- у меня к тебе вопрос, что вернёт функция если попадём в ветвь исключения в catch???На экране напишет что-то. а программа дальше как, блок вызвавший search - что в него вернёшь???Ведь после getch ни стопа для алгоритма ни exit нет.
Вы абсолютно правы, спасибо.
Теперь мне нужны коды для клавиш "влево" "вправо" "верх" "вниз" для getch(); не поможете?)

Добавлено через 2 минуты
И опять же не надо... Действительно, яндекс находит все...

Добавлено через 44 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Предлагаю "залатать по быстрому"
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
32
33
Elem *search(int num) //ïîèñê ýëåìåГ*ГІГ* ГЇГ® ëîãèñåñêîìó Г*îìåðó
{
    int i=0;
    Elem *t=NULL;
    if(num==0) 
        return head;
    if(num==size-1) 
        return end;
    try
    {
        if(num<0||num>size-1) 
            throw "Invalid number, press any key...";
        else 
        {
            if(num!=0&&num!=size-1)
            {
            
                t=head;
                while(t!=NULL && i<num)
                {
                    t=t->next;
                    i++;
                }
                return t;
            }
        }       
    }
    catch (char *s)
    {
        cout<<s; getch(); cout<<endl;
    }   
    return t;
}

Опять же, придется везде править код, потому что для очень многих функций недопустимо значение найденного элемента NULL; Я хотел сделать через goto; но компилятор не видит меток, поставленных в мейне... что делать?=)
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
18.01.2012, 19:07     Глюк системы или кривой код? #12
Цитата Сообщение от Akkoks Посмотреть сообщение
goto
В плюсах? Исключения же
Akkoks
0 / 0 / 0
Регистрация: 10.06.2011
Сообщений: 31
18.01.2012, 19:13  [ТС]     Глюк системы или кривой код? #13
Цитата Сообщение от NoMasters Посмотреть сообщение
В плюсах? Исключения же
Я забыл уже как делать=(
Melkor
30 / 30 / 1
Регистрация: 15.12.2011
Сообщений: 108
18.01.2012, 19:38     Глюк системы или кривой код? #14
вернецо t, причем значение у него будет NULL. мне только непонятно накой черт тут исключения ???
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
18.01.2012, 19:42     Глюк системы или кривой код? #15
Melkor, я отвечал Akkoks, тред не читал...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2012, 23:03     Глюк системы или кривой код?
Еще ссылки по теме:

C++ Перевод числа из двоичной системы в десятичную или наоборот
C++ Глюк печатания и глюк порчи константы
C++ Переделать код для 400-ичной системы счисления

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
18.01.2012, 23:03     Глюк системы или кривой код? #16
Цитата Сообщение от Akkoks Посмотреть сообщение
Теперь мне нужны коды для клавиш "влево" "вправо" "верх" "вниз" для getch(); не поможете?)
- да легко, вот код для awds кнопок(со стрелками один геморой, как по мне лучше клавиатуру использовать)
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
32
33
34
35
#include <conio.h>
 
int main()
{
    int iContinue = 1;
    while(iContinue == 1)
    {
        _cprintf("\t***MENU***\n");
        _cprintf("W - UP\n");
        _cprintf("S - DOWN\n");
        _cprintf("A - LEFT\n");
        _cprintf("D - RIGHT\n");
        _cprintf("Any other key - exit\n");
        _cprintf("Your choose  is : ");
        switch(_getch())
        {
            case 'w':
                _cprintf("UP\n");
                break;
            case 's':
                _cprintf("DOWN\n");
                break;
            case 'a':
                _cprintf("LEFT\n");
                break;
            case 'd':
                _cprintf("RIGHT\n");
                break;
            default:
                iContinue = 0;
                break;
        }
    }
    return 0;
}
- я написал в С, т.к. неохота біло что-то ещё подключать кроме conio.h

Добавлено через 2 минуты
Цитата Сообщение от Akkoks Посмотреть сообщение
Опять же, придется везде править код, потому что для очень многих функций недопустимо значение найденного элемента NULL; Я хотел сделать через goto; но компилятор не видит меток, поставленных в мейне... что делать?=)
- откажитесь от использования goto он нерекомендован, код переписать всегда можно, но если "не очень хочется" накрайняк возвращайте не NULL а к примеру end или beg - в чём проблемма то(даже код править не нужно будет)...
Yandex
Объявления
18.01.2012, 23:03     Глюк системы или кривой код?
Ответ Создать тему
Опции темы

Текущее время: 04:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru