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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Как увеличить лимит на количество символов в консоли http://www.cyberforum.ru/cpp-beginners/thread127930.html
Использую консоль для вывода информации В определенный момент старая информация затираеться Можно как то увеличить лимит на количество символов которые можно вывести в консоль ? Или вообще сделать так чтобы старая информация не затиралась
C++ Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами. Распечатать все слова из каждой строки, начинающиеся и заканчивающие-ся на заданную букву. Добавлено через 1 час 10 минут неужели никто не знает как решать http://www.cyberforum.ru/cpp-beginners/thread127925.html
построение окружностей C++
Разработать программу для построения изображения, приведенного на рисунке. Исходные данные (х1, у1, х2, у2, r1, R2) должны быть заданы пользователем. Программа должна осуществлять проверку правильности исходных данных (обязательное пересечение окружностей) http://s56.***********/i153/1005/86/022690527f61.jpg может поможет кто? ну я вообще тупиииица =((((
Ошибка при компилировании на С++ C++
Добрый день! что это такое: при компилировании на С++ возникает ошибка "unable to run program file" . Переустановка не помогает. скриншот по ссылке http://s41.***********/i091/1005/fd/3b504f5c0134.jpg
C++ Определить k-й элемент этой последовательности, введя k с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread127907.html
Помогите пожалуйста написать программы с использованием циклов. Массивы не использовать. 1.Дан первый элемент последовательности и рекуррентная формула . Определить k-й элемент этой последовательности, введя k с клавиатуры. 2.Вычислить сумму бесконечного знакопеременного ряда(указан в изображении) с точностью eps и определить, сколько элементов (по модулю), вошедших в вычисление...
C++/CLI WinForms ListView - выбор SubItem Пишу на C++ под MS Visual Studio 2008. Проект Windows Form В форме есть listView, отображение-detail. При активации любого элемента создается событие: private: System::Void listView1_ItemActivate(System::Object^ sender, System::EventArgs^ e) { ListView::SelectedListViewItemCollection ^itemselect=listView1->SelectedItems; } Собственно сам вопрос: как из коллекции itemselect вытащить... подробнее

Показать сообщение отдельно
_Eldar_
 Аватар для _Eldar_
44 / 29 / 3
Регистрация: 31.10.2009
Сообщений: 200
12.05.2010, 07:17     Класс, реализующий стек
Привет всем, Есть такая задача:
Описать класс, реализующий стек. Написать программу, использующую этот класс
для моделирования Т-образного сортировочного узла на железной дороге. Программа
должна разделять на два направления состав, состоящий из вагонов двух
типов (на каждое направление формируется состав из вагонов одного типа).
Предусмотреть возможность формирования состава из файла и с клавиатуры.

Я так понял, что нужно сначала сформировать состав и записать его в стек, затем из этого стека распределить в 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru