Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
139 / 71 / 26
Регистрация: 29.06.2015
Сообщений: 186
1

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

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

Всем привет!
Учусь на программиста и нам задали проект: написать программу, где используется список и очередь.
Начав писать, столкнулась с проблемой вывода информации на экран: первая строка выводится, а потом программа вылетает. Сколько сижу, а найти ошибку не могу. Сказывается недостаточность опыта. Пожалуйста помогите!
P.S.:код большой, состоит из нескольких хидеров и .cpp файлов, поэтому прикрепляю архив
Lesson9 - Lab5.rar
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2015, 16:03
Ответы с готовыми решениями:

Вылетает приложение на моменте InitializeComponent() Xamarin
Здравствуйте. Хотел в приложении сделать добавление человека и вывод его в listview, однако...

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

Ошибка при выведении текста на экран
Здравствуйте, уважаемые форумчане. Пишу программу, визуализирующую алгоритм Bucket Sort, используя...

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

8
47 / 46 / 29
Регистрация: 11.11.2014
Сообщений: 332
29.06.2015, 16:33 2
В каком файле ошибка?
0
67 / 67 / 72
Регистрация: 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
139 / 71 / 26
Регистрация: 29.06.2015
Сообщений: 186
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
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
29.06.2015, 23:09 5
Цитата Сообщение от irises Посмотреть сообщение
C++
1
2
3
4
void Client::print ()
{
* * cout<<getNumber()<<" *"<<getSurname()<<" *"<<getName()<<" *"<<getYears()<<" *"<<getMoney();
}
Не по поводу ошибки (с кодом не разбирался), а на будущее: не нужно так вывод организовывать, порядок вызовов функций тут неопределён. Сделай в каждой строке по одному cout <<.
0
Модератор
Эксперт С++
10147 / 8497 / 5164
Регистрация: 18.12.2011
Сообщений: 22,734
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
139 / 71 / 26
Регистрация: 29.06.2015
Сообщений: 186
01.07.2015, 22:24  [ТС] 7
У Вас создан массив из 10 очередей.
каждая очередь содержит всего по 1 элементу.
в каждой из них указателю на следующий элемент ноль не присвоен.
там хранится мусор.
поэтому temp = temp->getNext(); этот мусор оказывается в temp и цикл не прекращается
т.к. temp==0 не выполнено
а как в этом случае правильно создать очередь из 10 элементов?
0
Модератор
Эксперт С++
10147 / 8497 / 5164
Регистрация: 18.12.2011
Сообщений: 22,734
02.07.2015, 06:40 8
Лучший ответ Сообщение было отмечено irises как решение

Решение

Так запихивайте все данные в одну очередь, а не в массив из 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
139 / 71 / 26
Регистрация: 29.06.2015
Сообщений: 186
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.07.2015, 20:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

Программа для получения информации из сайта и присвоения информации переменным
Доброго времени суток, уважаемые пользователи форума! Надеюсь, у Вас сегодня хорошее настроение?...

Ошибка при выведении сообщения
после нажатия кнопки &quot;рассчитать&quot;, если не заполнили edit должно вылезти сообщение об ошибке....


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

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

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