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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
_Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
#1

Класс, реализующий стек - C++

12.05.2010, 07:17. Просмотров 2181. Ответов 0
Метки нет (Все метки)

Привет всем, Есть такая задача:
Описать класс, реализующий стек. Написать программу, использующую этот класс
для моделирования Т-образного сортировочного узла на железной дороге. Программа
должна разделять на два направления состав, состоящий из вагонов двух
типов (на каждое направление формируется состав из вагонов одного типа).
Предусмотреть возможность формирования состава из файла и с клавиатуры.

Я так понял, что нужно сначала сформировать состав и записать его в стек, затем из этого стека распределить в 2 стека по типу вагонов.

Вообщем начал решать задачу, написал метод помещения в стек, проверяю - вагон действительно помещается, но при выходе из программы вылетает ошибка((:

"Unhandled exception at 0x10252758 (msvcr80d.dll) in Stack.exe: 0xC0000005: Access violation reading location 0xfeeefee2."
и открывается файл dbgdel.cpp на строке :
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));

Я так подозреваю дело в деструкторе, но не пойму в чем именно:
Вот мой код:

Файл Stack.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <windows.h>
 
class Stack{
    
private:
    struct Node{
        int num_coach;
        Node* prev;
    };
    Node* top;
 
public:
    Stack ();
    ~Stack();
    Node** GetTop();
    int GetNumCoach(Node** top);
    void push(Node **top, int p_num_coach);
    //Node* pop(Node **top);    
 
};]
Файл Stack.cpp
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
#include "Stack.h"
 
using namespace std;
 
Stack::Stack(){
    top = 0;
    cout << "Конструктор работает" << endl;
 
}
 
Stack::~Stack(){
    while(top){
        Node *pv = top;
        delete pv;
        top = top->prev;
    }
    cout << "Деструктор работает" << endl;
}
 
Stack::Node** Stack::GetTop(){
    return &top;
}
 
int Stack::GetNumCoach(Stack::Node **top){
 
    return (*top)->num_coach;
    
}
 
void Stack::push(Stack::Node **top, int p_num_coach){
 
    Stack::Node* pv = new Stack::Node;
 
    if (top) {
        
        pv->prev = *top;
        pv->num_coach = p_num_coach;
        *top = pv;
    }
    else{
        pv->num_coach = p_num_coach;
        pv->prev = 0;
        *top = pv;
    }
 
}
Файл Main.cpp
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
#include <conio.h>
 
#include "Stack.h"
 
using namespace std;
 
int main(){
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Программа запущена" << endl;
 
    Stack empty_coach;
 
    empty_coach.push(empty_coach.GetTop(), 1024);   
 
    cout << empty_coach.GetTop() << endl;
    cout << empty_coach.GetNumCoach(empty_coach.GetTop()) << endl;
 
    
    _getch();
    return 0;
}
Добавлено через 10 часов 48 минут
Люди, добрые, помогите разобраться пожалуйста.

Добавлено через 6 часов 41 минуту
Все нашел ошибку, в деструкторе
C++
1
2
3
4
5
6
7
8
Stack::~Stack(){
        while(top){
                Node *pv = top;
                delete pv;
                top = top->prev;
        }
        cout << "Деструктор работает" << endl;
}
я объявил указатель на вершину стека, очистил памать на которую он указывал и пытаюсь присвоить вершине указатель на предыдущий элемент. Надо было сначала изменить вершину, а потом уже очищать память:
C++
1
2
3
4
5
6
7
8
Stack::~Stack(){
        while(top){
                Node *pv = top;                
                top = top->prev;
                delete pv;
        }
        cout << "Деструктор работает" << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2010, 07:17     Класс, реализующий стек
Посмотрите здесь:

Класс, реализующий множество - C++
Создать класс реализующий множество целых чисел. Доп. условия: Элементы множества хранить в числовом массиве, операции объединения и...

Класс контейнера, реализующий интерфейс - C++
Всем доброго времени суток. Возник вопрос по выполнению задания. Вот само задание: Необходимо разработать класс контейнера,...

Описать класс, реализующий возможности - C++
Часы. установка времени; перевод на летнее время; перевод на зимнее время; вывести текущее время; ход в течение N секунд (Т=1...100-0) ...

Описать класс, реализующий бинарное дерево - C++
помогите ..ребят знаю что обсуждалось уже кучу раз..но у мне выдаёт ошибки..разобраться не могу..эту роботу должна сдать очень скоро..(( ...

Создать класс, реализующий произвольный треугольник - C++
Класс должен содержать конструктор, деструктор, Set- и Get-методы для каждого поля

Описать класс, реализующий бинарное дерево - C++
Здравствуйте! Возникли проблемы с реализацией одной программы ....Описать класс, реализующий бинарное дерево, обладающее возможностью...

Cоздать класс-шаблон, реализующий односвязный список - C++
Помогите новичку, пожалуйста, с такой задачей: необходимо создать класс-шаблон, реализующий односвязный список, а потом проверить его с...

Создать класс, реализующий однонаправленный список на основе одномерного массива - C++
Здравствуйте, уважаемые гуру, асы и прочие гении программирования С++ Помогите пожалуйста решить данную задачку, буду рад любой помощи :)...

Написать класс PayPoint, реализующий пункт сбора платежей за проезд по автостраде - C++
Кто сможет написать помогите пожалуйста!

Класс стек - C++
Доброго времени! Читаю книгу Р. Лафоре - Объектно-ориентированное программирование С++. В теме: &quot;Массивы как члены классов&quot;...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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