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

Необработанное исключение - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Форматированное чтение из файла в массив структур http://www.cyberforum.ru/cpp-beginners/thread885325.html
Здравствуйте, посоветуйте как лучше сделать чтение из файла в массив структур с разными типами данных. Входной файл (все денные введены через знак табуляции): toyota 130 250 1500 sedan 2200 1800 audi 220 250 1500 hetch 2000 2500 bmv m3 250 320 1700 sedan 2800 3200 ferrari 450 375 1200 coupe 3500 8500 Каждую строчку надо внести в массив структур: struct car { char name;//имя
C++ алгоритм подскажите что делает этот алгоритм, и что с ним делать? %-) http://pixs.ru/showimage/algoritmJP_7940233_8092649.jpg http://www.cyberforum.ru/cpp-beginners/thread885322.html
Найти сумму тех из элементов a2j(j=1,...,m), для которых a1j имеет значение наибольшего среди значений a11, a12,...,a1m C++
нужно решение на с++ Даны натуральное число n, целочисленная матрица i=1,2; j=1,...,m. Найти сумму тех из элементов a2j(j=1,...,m), для которых a1j имеет значение наибольшего среди значений a11, a12,...,a1m.
C++ Даны действительные числа a, b. Получить u
нужен код с++ для этой задачи. помогите кто может Даны действительные числа a, b. Получить u = min(a,b),υ = min(ab,a + b), min(u +υ 2 , 3.14)
C++ Таблица футбольного чемпионата задана квадратной матрицей. Определить номера команд, прошедших чемпионат без поражений http://www.cyberforum.ru/cpp-beginners/thread885312.html
помогите пожалуйста написать код в с++ 1. Таблица футбольного чемпионата задана квадратной матрицей порядка n, в которой все элементы, принадлежащие главной диагонали, равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен 2, 1 или 0 (числу очков, набранных в игре: 2 — выигрыш, 1 — ничья, 0 — проигрыш). а) Найти число команд, имеющих больше побед, чем поражений. б)...
C++ Произведение элементов массива Помогите, пожалуйста, с небольшой задачкой. Суть в следующем: Например, есть одномерный массив и надо найти произведение тех чисел, которые находятся, например, между 3 и 8 элементами. подробнее

Показать сообщение отдельно
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
30.05.2013, 18:36     Необработанное исключение
Вот пытаюсь спровоцировать исключение, все работает только оно вылетает не там где я ожидаю. По идее когда список пуст имеет пуститься исключения throw out_of_range("List is empty!");, но неожиданно оно выскакивает вот здесь p1->next = NULL; Почему именно там? Что там не так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void pop_back()
    {
        node *p, *p1;
        p = last;
        p1 = last->prev;
        if(empty())
            throw out_of_range("List is empty!");
        else
        {
            p1->next = NULL; // <--------------
            delete p;
            last = p1;
        }
    }
Вот полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include "queue.h"
 
using namespace std;
 
int main()
{
    queue<int> q;
    for(int i=0;i<5;i++)
        q.enqueue(i+1);
    q.print();
    try{
        for(int i=0;i<5;i++)
        q.dequeue();
    }catch(out_of_range&e)
    {
        cout<<e.what();
    }
    q.print();
    cin.get();
    return 0;
}
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#ifndef _LIST_H_
#define _LIST_H_
 
#include <iostream>
 
template<typename T>
class List
{
public:
    List()
    {
        head = new (node);
        head->next = NULL;
        head->prev = NULL;
    }
 
    ~List()
    {
        node *p, *p1;
        p = head;
        p1 = p->next;
        while(p1 != NULL)
        {
            p = p1;
            p1 = p1->next;
            delete p;
        }
        delete head;
    }
 
    bool empty()
    {
        if(head->next == NULL)
            return true;
        return false;
    }
 
    void pop_back()
    {
        node *p, *p1;
        p = last;
        p1 = last->prev;
        if(empty())
            throw out_of_range("List is empty!");
        else
        {
            p1->next = NULL;
            delete p;
            last = p1;
        }
    }
 
    void push_back(T el)
    {
        node *p;
        p = new (node);
        p->item = el;
        if(head->next == NULL)
        {
            head->next = p;
            p->next = NULL;
            p->prev = head;
            last = p;
        }else{
            p->next = NULL;
            last->next = p;
            p->prev = last;
            last = p;
        }
    }
 
    void push_front(T el)
    {
        node *p, *p1;
        p = new (node);
        p->item = el;
 
        if(head->next == NULL){
            head->next = p;
            p->next = NULL;
            p->prev = head;
            last = p;
        }else{
            p->next = head->next;
            p->next->prev = p;
            head->next = p;
        }
    }
 
    void print()
    {
        for(node* p = head->next; p != NULL; p = p->next)
            std::cout<<p->item<< " ";
        std::cout<<std::endl;
    }
private:
    struct node
    {
        T item;
        node* prev;
        node* next;
    }*head,*last;
};
 
#endif
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
#ifndef _queue_h
#define _queue_h
 
#include "List.h"
 
template<typename T>
class queue
{
public:
    void enqueue(T el)
    {
        l.push_front(el);
    }
    void dequeue()
    {
        l.pop_back();
    }
    bool empty()
    {
        return l.empty();
    }
    void print()
    {
        l.print();
    }
private:
    List<T> l;
};
 
#endif
Добавлено через 19 минут
Уже нашел в чем причина, просто неправильно элемент вставлял в список. Указатель prev должен указывать на голову, а у меня он указывал на что-то другое)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru