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

Создать класса «однонаправленный кольцевой список». - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
WASAW
3 / 3 / 0
Регистрация: 10.11.2009
Сообщений: 102
09.10.2011, 22:31     Создать класса «однонаправленный кольцевой список». #1
Подскажите пожалуйста, в чем ошибка, так как компилятор ошибку не выдает, одна при запуске вылетает, при отладке вылетает на этой строке
C++
1
*pend =  temp;
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
class Node
    {
        public:
        int d; // Данные
        Node *next; // Указатель на последующий узел
        Node ()
        { // Конструктор
             next = 0; 
        }
    };
 
    class List
    {
        Node *pbeg, *pend; // Указатели на начало 
        public:
        List(){pbeg = 0; pend = 0;} //Конструктор
        ~List(){}; // Деструктор
        void add(int data)// Добавление узла в конец списка
        {
            Node temp(data);
            temp.next = pbeg;
            *pend =  temp;  // НА этом вылетает
        }
        
    };
 
int main()
{
    List element;
    element.add(5);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
09.10.2011, 23:11     Создать класса «однонаправленный кольцевой список». #2
temp - автоматический объект. Локальная переменная, по другому. То есть она не существует за пределами метода add. А вы её адрес присваиваете указателю pend.

Добавлено через 1 минуту
Да, и конструкторы лучше делать так:

C++
1
List() : pbeg(0), pend(0) { }
Список инициализации называется.
WASAW
3 / 3 / 0
Регистрация: 10.11.2009
Сообщений: 102
12.10.2011, 00:45  [ТС]     Создать класса «однонаправленный кольцевой список». #3
А как тогда правильно исправить?
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.10.2011, 00:51     Создать класса «однонаправленный кольцевой список». #4
Вам нужно динамическое выделение памяти через new. Соответственно, и освобождение через delete.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
12.10.2011, 08:12     Создать класса «однонаправленный кольцевой список». #5
Цитата Сообщение от talis Посмотреть сообщение
А вы её адрес присваиваете указателю pend.
Проблема в другом. pend = 0 с последующим *pend=temp;.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
12.10.2011, 10:32     Создать класса «однонаправленный кольцевой список». #6
Да, разименовывания не заметил. Однако, всё равно, нужно динамическое выделение памяти.
Yandex
Объявления
12.10.2011, 10:32     Создать класса «однонаправленный кольцевой список».
Ответ Создать тему
Опции темы

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