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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
irises
69 / 26 / 8
Регистрация: 29.06.2015
Сообщений: 105
#1

Вылетает программа на моменте выведении информации на экран - C++

29.06.2015, 16:03. Просмотров 290. Ответов 8
Метки нет (Все метки)

Всем привет!
Учусь на программиста и нам задали проект: написать программу, где используется список и очередь.
Начав писать, столкнулась с проблемой вывода информации на экран: первая строка выводится, а потом программа вылетает. Сколько сижу, а найти ошибку не могу. Сказывается недостаточность опыта. Пожалуйста помогите!
P.S.:код большой, состоит из нескольких хидеров и .cpp файлов, поэтому прикрепляю архив
Lesson9 - Lab5.rar
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2015, 16:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вылетает программа на моменте выведении информации на экран (C++):

Запрос о выведении информации последних месяцев - MySQL
ДОБРЫЙ ДЕНЬ!!! Подскажите пожалуйста, как написать запрос выведения информации последних 3 месяцев? информацию последних 5 дней...

Хром не открывается, модем вылетает, везде просят капчу. И вылетает синий экран - Удаление вирусов
В общем, хотела найти лечение на соседнем форуме...но мой вопрос проигнорили.:( Одна надежда на Вас!:) Итак, с чего всё началось : ...

При установке 2-х планок вылетает синий экран \ экран смерти - Оперативная память
Все работало отлично ( работает не трогай ), до того времени как я решил обновить биос ( на то было ряд причин ). Прошивку брал с офф...

Троян Dorv.A, черный экран, часто вылетает синий экран - Удаление вирусов
Здравствуйте! Оговорюсь сразу, что в компьютерах разбираюсь плохо. Настолько, что с самой покупки ноутбука система ни разу не обновлялась....

Ошибка при выведении сообщения - Lazarus
после нажатия кнопки "рассчитать", если не заполнили edit должно вылезти сообщение об ошибке. проблема в том, что после того, как это...

Ошибка в коде при выведении строки - C++
Пишу код для покера. Вот одна из его частей: #include <iostream> #include <time.h> using namespace std; class Pack { ...

8
isobo531
42 / 42 / 11
Регистрация: 11.11.2014
Сообщений: 322
29.06.2015, 16:33 #2
В каком файле ошибка?
0
mr_mczakenberg
65 / 65 / 31
Регистрация: 10.04.2015
Сообщений: 281
29.06.2015, 16:37 #3
Учитывая наличие(см.ниже) все должно работать(см. ниже х2)
C++
1
2
3
4
5
int getNumber () { return number; }
    char *getSurname () { return surname; }
    char *getName () { return name; }
    float getYears () { return years; }
    int getMoney () { return money; }
Вывод более одного параметра был здесь:
C++
1
2
3
4
void Client::print ()
{
    cout<<getNumber()<<"  "<<getSurname()<<"  "<<getName()<<"  "<<getYears()<<"  "<<getMoney();
}
0
irises
69 / 26 / 8
Регистрация: 29.06.2015
Сообщений: 105
29.06.2015, 17:18  [ТС] #4
В каком файле ошибка?
Мне самой трудно найти.

C++
1
2
3
4
5
6
7
8
void main ()
{
    Queue q1 [10];
    for (int i=0; i<10; i++)
        q1[i].push ();
    for (int i=0; i<10; i++)
        q1[i].printQueue ();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Queue::printQueue ()
{
    Element *temp = head;
    while (true)
    {
        if (temp==0)
            break;
        temp->printElement ();
        temp = temp->getNext(); // кажется здесь плохо перекидывается указатель, на этом моменте вылетает
    }
    cout<<endl;
}
C++
1
2
3
4
5
void Element::printElement ()
{
    getPerson().print();
    cout<<" Prior - "<<getPriority()<<endl;
}
C++
1
2
3
4
void Client::print ()
{
    cout<<getNumber()<<"  "<<getSurname()<<"  "<<getName()<<"  "<<getYears()<<"  "<<getMoney();
}
Когда дебажу на этапе вывода информации, то первый раз цикл срабатывает, а потом (мне так кажется) плохо срабатывает указатель.

Учитывая наличие(см.ниже) все должно работать(см. ниже х2)
Должно, но почему то не работает((
0
lss
921 / 850 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
29.06.2015, 23:09 #5
Цитата Сообщение от irises Посмотреть сообщение
C++
1
2
3
4
void Client::print ()
{
* * cout<<getNumber()<<" *"<<getSurname()<<" *"<<getName()<<" *"<<getYears()<<" *"<<getMoney();
}
Не по поводу ошибки (с кодом не разбирался), а на будущее: не нужно так вывод организовывать, порядок вызовов функций тут неопределён. Сделай в каждой строке по одному cout <<.
0
zss
Модератор
Эксперт С++
6484 / 6047 / 1985
Регистрация: 18.12.2011
Сообщений: 15,680
Завершенные тесты: 1
30.06.2015, 08:15 #6
вот в этот куске runtime error
C++
1
2
3
4
5
6
7
while (true)
    {
        if (temp==0)
            break;
        temp->printElement ();
        temp = temp->getNext();
    }
У Вас создан массив из 10 очередей.
каждая очередь содержит всего по 1 элементу.
в каждой из них указателю на следующий элемент ноль не присвоен.
там хранится мусор.
поэтому temp = temp->getNext(); этот мусор оказывается в temp и цикл не прекращается
т.к. temp==0 не выполнено
0
irises
69 / 26 / 8
Регистрация: 29.06.2015
Сообщений: 105
01.07.2015, 22:24  [ТС] #7
У Вас создан массив из 10 очередей.
каждая очередь содержит всего по 1 элементу.
в каждой из них указателю на следующий элемент ноль не присвоен.
там хранится мусор.
поэтому temp = temp->getNext(); этот мусор оказывается в temp и цикл не прекращается
т.к. temp==0 не выполнено
а как в этом случае правильно создать очередь из 10 элементов?
0
zss
Модератор
Эксперт С++
6484 / 6047 / 1985
Регистрация: 18.12.2011
Сообщений: 15,680
Завершенные тесты: 1
02.07.2015, 06:40 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Так запихивайте все данные в одну очередь, а не в массив из 10 очередей.
C++
1
2
3
4
5
6
7
void main ()
{
    Queue q1;
    for (int i=0; i<10; i++)
        q1.push(i);
     q1.printQueue();
}
И найдите, где у Вас не обнуляется указатель на следующий элемент для последнего элемента в очереди.
1
irises
69 / 26 / 8
Регистрация: 29.06.2015
Сообщений: 105
04.07.2015, 20:31  [ТС] #9
Цитата Сообщение от zss Посмотреть сообщение
И найдите, где у Вас не обнуляется указатель на следующий элемент для последнего элемента в очереди.
нашла где это исправить
C++
1
2
3
4
5
6
7
while (true)
    {
        if (temp==tail)    // здесь было (temp==0)
            break;
        temp->printElement();
        temp = temp->getNext();
    }
после исправленной ошибки больше не вылетает!!!
СПАСИБО БОЛЬШОЕ!!!
0
04.07.2015, 20:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2015, 20:31
Привет! Вот еще темы с ответами:

вылетает синий экран - BSOD
частто вылетает синий экран,отключил автоматическую перезагрузку и переписал вот что STOP:0x0000007E...

Вылетает синий экран - BSOD
Люди добрые помогите пожалуйста избавится от этой проблемы, до переустановки винды комп часто сам перезагружался, а после переустановки...

Вылетает в синий экран - BSOD
Вылет происходит при игре

Вылетает программа - C++
Здравствуйте! Сама формулировка задачи: Массив записей содержит информацию о результатах сдачи зимней сессии: фамилия, шифр группы,...


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

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

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