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

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

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

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

12.05.2010, 07:17. Просмотров 2203. Ответов 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;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2010, 07:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс, реализующий стек (C++):

Класс, реализующий стек - C++
Помогите девушке, только учусь программировать и чет пока не очень=( плиииииииииииииииииииииииииз кого не затруднит...... Задание 5....

Описать класс, реализующий стек - C++
Всем привет, нуждаюсь в помощи. Описать класс, реализующий стек. Написать программу, использующую этот класс для моделирования...

Написать класс, реализующий Стек - C++
Написать класс, реализующий стек или очередь (что указано в задании). В классе описать соответствующие методы (push, pop и т.д.). В...

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

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

Класс, реализующий стек точек - C++
описание класса ,реализующего стек точек R2(int ,int) очень нужно,плиииз

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2010, 07:17
Привет! Вот еще темы с ответами:

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

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

Класс, реализующий стек. Перегрузка операций взятия и извлечения элемента. - C++
не могу написать. вот отрывок здания. Создайте класс, реализующий стек. В интерфейс класса должны входить перегруженные операции: 1)...

Описать класс, реализующий стек целых чисел типа LIFO. - C++
Методы класса: а) создание стека; б) добавление элемента в стек (функция push); в) выбор элемента из стека, удаляя его из стека...


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

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

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