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

Создание и работа со стеком - C++

Восстановить пароль Регистрация
 
Белчен
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 8
27.03.2014, 19:38     Создание и работа со стеком #1
выскакивает ошибка Необработанное исключение по адресу 0x00BC56C7 в стек.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCDCD.
Как исправить?

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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
struct  Node{
    int data;
    Node *next;
};
 
 
struct Stack{
    Node*begin;
};
void Init(Stack &s)
{
    s.begin= NULL;
}
bool Empty(Stack &s)
{
    if (s.begin == NULL)
        return true;
    else return false;
}
void push_Back(Stack &s, int data)
{
    Node*tmp=new Node;
 
    tmp->data = data;
    tmp->next = NULL;
 
    if (s.begin==NULL) 
    s.begin = tmp;
    
}
 
void pop_front(Stack &s)
{
    Node*tmp = s.begin;
    s.begin = s.begin->next;
    if (s.begin== NULL)
    delete tmp;
}
int Top(Stack &s)
{
    return s.begin->data;
}
void Print(Stack &s)
{
    Node*tmp = s.begin;
    while (tmp != NULL) tmp;
    { printf("%d", tmp->data);
    tmp = tmp->next;
    }
}
void clear(Stack &s)
{
    Node*tmp = s.begin;
    while (s.begin != NULL)
    {
        tmp = s.begin;
        s.begin = s.begin->next;
        delete tmp;
    }
}
int main()
{
    setlocale(LC_ALL, "Russian");
    Stack *a = new Stack;
 
    for (int i = 1; i != 21; ++i)
        push_Back(*a, i);
    while (a)
    
    {
        printf("%d", a->begin->data);
        pop_front(*a);
    }
    delete[]a;
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 19:38     Создание и работа со стеком
Посмотрите здесь:

C++ работа со стеком
C++ Работа со стеком
C++ Работа со стеком
C++ Работа со СТЕКОМ!!!!!!:)
Работа со стеком! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
27.03.2014, 20:28     Создание и работа со стеком #2
При обработке функций push_Back, pop_front вы создаете временный объект tmp, на который даете указатель в объект структуры Stack. После выхода из функции объект более не доступен.
Белчен
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 8
27.03.2014, 22:08  [ТС]     Создание и работа со стеком #3
ну а как же тогда сделать, чтобы он был доступен?
Wlk
49 / 49 / 13
Регистрация: 07.12.2011
Сообщений: 133
28.03.2014, 15:26     Создание и работа со стеком #4
Нужно что бы объекты Node были доступны в любой точке, где вы можете к ним обратится.
Точно пока не скажу, но возможно нужно организовать все это дело на основе другого контейнера или структуры организации данных.
Так же как, например, вектор организован на основе динамического массива.
Белчен
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 8
31.03.2014, 09:15  [ТС]     Создание и работа со стеком #5
спасибо, учту
IrineK
Заблокирован
31.03.2014, 12:09     Создание и работа со стеком #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Белчен, проблема мне видится как-то так:

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
#include <iostream>
using std::cout;
 
struct  Node
{   int data;
    Node *next;
};
 
struct Stack
{   Node *begin;
};
 
Stack *CreateStack()
{   Stack *s = new Stack;
    s->begin= NULL;
    return s;
}
 
bool Empty(Stack *s)
{   if (s->begin == NULL)
        return true;
    return false;
}
 
void PushBack(Stack *s, int data)
{   Node *tmp = new Node;
    tmp->data = data;
    tmp->next = NULL;
 
    if (Empty (s)) 
    {   s->begin = tmp;
        return;
    }
    
    Node *n1 = s->begin;
    Node *n2 = s->begin->next;
    
    while (n2 != NULL)
    {   n1 = n1->next;
        n2 = n2->next;
    }
 
    n1->next = tmp;
}
 
void PopFront(Stack *s)
{   if (Empty (s))
        return;
    
    Node *tmp = s->begin;
    s->begin = s->begin->next;
    delete tmp;
}
 
int Top(Stack *s)
{   return s->begin->data;
}
 
void Print(Stack *s)
{   Node *tmp = s->begin;
    while (tmp != NULL) 
    {   printf("%5d", tmp->data);
        tmp = tmp->next;
    }
    printf("\n");
}
 
void Clear(Stack *s)
{   Node *tmp = s->begin;
    while (s->begin != NULL)
        PopFront(s);
}
 
int main()
{   setlocale(LC_ALL, "Russian");
    Stack *a = CreateStack();
 
    for (int i = 1; i < 11; ++i)
        PushBack(a, i);
 
    cout << "\nСтек создан:\n";
    Print (a);
 
    cout << "\nЗначение первого узла:\n\t" << Top(a) << '\n';
    
    cout << "\nУдаляем первый узел...\nСтек после удаления:\n";
    PopFront (a);
    Print (a);
 
    cout << "\nУдаляем весь стек...\n";
    Clear (a);
    cout << "Успешно\n";
    
    getchar();
    return 0;
}
Миниатюры
Создание и работа со стеком  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2014, 15:38     Создание и работа со стеком
Еще ссылки по теме:

C++ Работа со стеком
C++ Работа со стеком
C++ Работа со стеком

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

Или воспользуйтесь поиском по форуму:
Белчен
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 8
31.03.2014, 15:38  [ТС]     Создание и работа со стеком #7
Спасибо большое!))сама бы не справилась(
Yandex
Объявления
31.03.2014, 15:38     Создание и работа со стеком
Ответ Создать тему
Опции темы

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