Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 20.10.2014
Сообщений: 14

Стек строк. Ошибка сегментации

15.11.2014, 16:28. Показов 1126. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Программирую недавно, около месяца, в своей программе столкнулся с ошибкой сегментации.
Не могу понять, в чем проблема.
Похожие темы исследовал на форуме.

Задание:
«Стек строк» – Stack. Написать несколько конструкторов, в том числе конструктор копирования. Элементы стека хранятся в массиве. Если массив имеет фиксированную размерность, то предусмотреть контроль выхода за пределы массива. Если память выделяется динамически и ее не хватает, то увеличить размер выделенной памяти. Включение элементов в стек и их извлечение реализовать в виде методов класса. Создать массив объектов. Передавать объекты в функцию, которая удаляет из стека второй (сверху), четвёртый, шестой и т. д. (чётные) элементы.

До удаления пока не дошел.
Ошибка вылезает после ввода элементов.

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <cstddef>
using namespace std;
 
//создание шаблона
 
class Stack {
 
    double *stackPtr; //указатель на стек
    //const std::size_t sz; 
    int sz;//размер стека
    double *d;    
    
public:
    Stack (); //конструктор
    Stack (const Stack &s); //конструктор копирования
    ~Stack(); //деструктор
    double& operator[](unsigned int idx);
    
    void Enter(int n);
    void Pop();
    void Show();
    void Del();
    
 
private:
    void Resize(unsigned int required_idx); //функция, выделения дополнительной памяти
        
};
 
//конструктор
Stack::Stack() : sz(0), d(0) {}
 
//конструктор копирования
 
Stack:: Stack(const Stack &s) : sz(s.sz)
{   
    d = new double[sz]; 
    for(size_t i = 0; i < sz; i++) 
        d[i] = s.d[i];
}        
 
 
double& Stack::operator[](unsigned int idx)
{
    if(idx >= sz)
        Resize(idx);
    return stackPtr[idx];    
}
 
//функция выделения дополнительной памяти
void Stack::Resize(unsigned int required_idx)
{
        unsigned int new_size = sz;
        while (new_size < required_idx)
            new_size *=2;
        double *new_arr = new double[new_size];
        for(unsigned int i = 0; i < sz; i++)
            new_arr[i] = stackPtr[i];
        delete[] stackPtr;
        stackPtr = new_arr;
        sz = new_size;
}        
 
//функция добавления элемента в стек
 
void Stack::Enter(int n)
{
    stackPtr[sz] = n;
    sz++;
    cout<<"Entering is ok"<<endl;
}
 
//функция вывода эллемаента на экран
 
void Stack::Show()
{
    for (int i=0; i<sz; i++)
            cout<<stackPtr[i]<<"";
    cout<<endl;        
}            
 
//функция pop        
void Stack::Pop()
{
    stackPtr = new double [sz];
    for (int i=0; i<sz; i++)
        d[i] = stackPtr[i];
    cout<<"Pop is ok"<<endl;    
        
}        
 
//функция удаления
void Stack::Del()
{
    delete []stackPtr;
    sz=0;
    cout<<"Deliting is ok"<<endl;
}    
 
 
 
int main() 
{
    Stack *arr;
    int n;
    cout<<"Enter numbers of ellements"<<endl;
    if (std::cin >> n)
    {
        arr = new Stack[n];
    }
  
    cout<<"Enter your elements"<<endl;
     for (int i=0; i<n; i++)
    {    
        arr[i].Enter(n);
        arr[i].Pop();
        arr[i].Show();
        arr[i].Del();
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2014, 16:28
Ответы с готовыми решениями:

Ошибка сегментации
Здравствуйте. Скажите, почему так делать нельзя? class A { public: A* array; //массив A() { //Ошибка...

Ошибка сегментации
Зарание благодарен за помощ собственно вот мой код . он должен считывать информацию о процессе с фалйа ,а принимать на вход пид процесса ...

Ошибка Сегментации
Всем привет! При выполнении кода вылетает ошибка: &quot;Ваша программа вызвала нарушение доступа(ошибку сегментации)&quot;. Как это...

2
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
15.11.2014, 16:39
stackPtr в конструкторе не инициализирован и по умолчанию указывает к черту на рога.
1
0 / 0 / 1
Регистрация: 20.10.2014
Сообщений: 14
15.11.2014, 20:17  [ТС]
Блин! И правда! спасибо!

Добавлено через 3 часа 25 минут
Переписал программу. Почему-то заканчивает выполнение после ввода размера стека...

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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <cstddef>
using namespace std;
 
class Stack
{
    string *stck; //stack pointer
    int sz; //stack size
    int ts; //top of the stack
    
public:    
    //constructor
    Stack(int size)
    {
        size=sz;
        stck = new string[sz];
        ts = -1;
    };
    
    //destructor
    ~Stack() {
    delete []stck;
    };
    
     //copy constructor    
    Stack (const Stack &ob);
    void Push(string itm);
    string Pop();
    void Show(int sz);
 
private:
    void Resize(int sz);    
        
};
 
    void Stack::Push(string itm)
    {
        if (ts == sz)
        {
            cout<<"Stack is overflow"<<endl;
            Resize(ts);
        }
        
        else stck[ts++] = itm;
    }
 
    string Stack::Pop()
    {
        if(ts<0)
        {
            cout<<"Stack is free"<<endl;
            return 0;    
        }
        else return stck[--ts];
    }   
 
    void Stack::Show(int sz)
    {
        for (int i = 0; i < sz; i++)
        {
        std::cout << stck[i] << std::endl;
        }
    }    
    
    Stack::Stack (const Stack &ob)
    {
        cout<<"Copy constructor allocating stackPtr)"<<endl;
        stck = new string;
        *stck = *ob.stck;
    }    
    
    //функция выделения дополнительной памяти
    void Stack::Resize(int idx)
    {
        int new_size = sz;
        while (new_size < idx)
            new_size *=2;
        string *new_arr = new string[new_size];
        for(int i = 0; i < sz; i++)
            new_arr[i] = stck[i];
        delete[] stck;
        stck = new_arr;
        sz = new_size;
    }        
    
    
int main()
{
    cout<<"Enter the size of the stack"<<endl;
    int n;
    cin>>n;
    Stack mystck(n);
    string str;
    
    for(int i=0; i<n; i++)
    {
    cout<<"Enter an element"<<endl;
    cin>>str;
    mystck.Push(str);
    }
    
    for(int j = 0; j<n; j+2)
    {
    mystck.Pop();
    mystck.Show(n);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.11.2014, 20:17
Помогаю со студенческими работами здесь

ошибка сегментации
где может быть ошибка?

Ошибка сегментации
Здравствуйте, написал программу, запускаю- Windows пишет: &quot;обнаружена ошибка. Приложение будет закрыто&quot;. Ошибка в функции: ...

Ошибка сегментации.
Здравствуйте, дорогие форумчане! Тут такое дело, есть программа, код приведен ниже, там есть некоторый массив D. После компиляции...

Ошибка сегментации
int main() { int mas; } Объясните, почему такой код привод к ошибке? (компилятор VS 2012)

ошибка сегментации
Всем привет! Я никогда не программировал, а тут решил склепать небольшую программку. Да вот только не могу понять почему выскакивает...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru