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

Выделение памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Определите в двумерном числовом массиве суммы положительных и отрицательных элементов http://www.cyberforum.ru/cpp-beginners/thread903648.html
Определите в двумерном числовом массиве суммы положительных и отрицательных элементов.
C++ Как из двусвязного списка удалить заданный элемент как из двусвязного списка удалить заданный элемент? у нас есть список фамилий: Иванов,Петров,Сидоров,Кукушкин,Укупник,Куприн,Васильев, Сидоров,Гончаров и нам надо удалить всех по фамилии Сидоров http://www.cyberforum.ru/cpp-beginners/thread903647.html
Удаление выбранных тегов (html-страница) C++
В текстовом файле хранится сохраненная html страница. нужно проверить её и удалить теги, выбранные пользователем имеется код программы ,который просто переводит ее в обычный текстовый вид, удаляя все теги что нужно дописать для удаления только выбранных? #include <iostream> #include <fstream> #include <string> using namespace std;
C++ Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали
Есть целочисленная квадратная матрица.Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
C++ Проблемка (программа сразу закрывается и не выдаёт ответ) http://www.cyberforum.ru/cpp-beginners/thread903640.html
#include "StdAfx.h" #include "iostream" // для cin и cout //#include "conio.h" // для getch #include "cmath" // для выполнения мат. вычислений //#include "locale.h" // для printf и setlocale #define afirst -0.5 #define asecond 1.9 #define bfirst 1.5
C++ Сформировать квадратную матрицу; транспонировать матрицу и инвертировать порядок элементов каждой ее строки Заданы два одномерных массива одинаковой длины: R и S.Сформировать квадратную матрицу A, каждый элемент которой, что находится в i-той строке и j-том столбику, равняется сумме элементов масива R на позиции і и масива S на позиции j.Транспонировать матрицу A и инвертировать порядок элементов каждой ее строки, после чего поменять местами первую и последнюю строку. подробнее

Показать сообщение отдельно
Ryabchik
17 / 17 / 1
Регистрация: 09.01.2013
Сообщений: 158
16.06.2013, 19:08     Выделение памяти
Доброго всем вечера. В книжке нашел задание: определить класс, представляющий стек.
Сделал так, что при заполнении всего стека, динамически выделяется новая память и все элементы стека туда копируются. Но почему то выдает ошибку (прикладываю скрин).

Вот класс
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
#include <iostream>
#include <new>
 
using std :: cout;
using std :: bad_alloc;
 
const int FIRST (10); //первоначальный размер стека
 
class STACK
{
    int *pstack;
    int recorded; //число записанных в стек элементов
    int size; //размер стека
 
public:
    STACK (int n)
    {
        pstack = new int [FIRST];
        *pstack = n;
        size = FIRST;
        recorded = 0;
    }
 
    int pop (); //удаляем верхний элемент
    int push (int n); //записываем верхний
    int print (); //выводим все
    int peek (); //выодим нижний
};
 
int STACK :: pop ()
{
    if (recorded = 0)
        cout << "\nОшибка! Стек пуст\n";
 
    else
    {
        cout << '\n' << *(pstack + recorded) << " удален из стека" << '\n';
        for (int i = 0, k = 1; k < recorded; i ++, k ++)
        {
            *(pstack + i) = *(pstack + k);
        }
    }
 
    recorded --; //минус один элемент
 
    system ("pause");
    return 0;
}
 
int STACK :: push (int n)
{
    if (recorded < size) //если стек не полон
    {
        recorded ++;
        *(pstack + recorded) = n;
    }
 
    if (recorded == size)
    {
        cout << "\nСтек заполнен. Выделяется новая память...\n";
        int *phelp;
 
        try
        {
            phelp = new int [FIRST * 2]; //выделяем новую память
            cout << "\nПамять выделена успешно\n";
        }
 
        catch (bad_alloc &ex)
        {
            cout << "\nНе удалось выделить память\n"
                << ex.what () << '\n';
            delete [] phelp;
        }
 
        for (int i = 1; i < FIRST; i ++) //копируем из старого стека во вспомогательный массив
            *(phelp + i) = *(pstack + i);
 
        delete [] pstack;
        pstack = nullptr;
 
        pstack = phelp;
 
        delete [] phelp;
        phelp = nullptr;
 
        cout << "\nУвеличение стека прошло успешно\n";
        recorded ++;
 
        system ("pause");
    }
 
    return 0;
}
 
int STACK :: print ()
{
    cout << "\nЭлементы стека: ";
 
    for (int i = 0; i < (recorded + 1); i ++)
    {
        cout << *(pstack + i) << " ";
    }
 
    cout << "." << '\n';
    system ("pause");
    return 0;
}
 
int STACK :: peek ()
{
    cout << "\nНижний элемент стека: " << *pstack << '\n';
 
    system ("pause");
    return 0;
}
Ну и на всякий пожарный - main:
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
#include <iostream>
#include <windows.h>
 
#include "Class_stack.h"
 
using std :: cin;
using std :: cout;
 
int main ()
{
    SetConsoleCP (1251);
    SetConsoleOutputCP (1251);
 
    cout << "Доброго времени суток.\nЭта программа работает со стеком целочисленных значений\n"
        <<"Введите первый элемент стека: ";
 
    int first;
    cin >> first;
 
    STACK s (first);
    
    int choice = 1;
    while (choice)
    {
        system ("CLS");
 
        cout << "1 - удалить элемент\n"
            << "2 - добавить элемент\n"
            << "3 - вывести все элементы\n"
            << "4 - вывести нижний элемент\n"
            << "0 - выход\n";
        cin >> choice;
 
        if (choice == 1)
            s.pop ();
 
        if (choice == 2)
        {
            cout << "\nВведите новый элемент стека (целое число): ";
            int number;
            cin >> number;
            s.push (number);
        }
 
        if (choice == 3)
            s.print ();
 
        if (choice == 4)
            s.peek ();
    }
 
    return 0;
}
Кстати, если видны признаки индусокода или вы считаете, что что-то можно сделать проще, буду рад любой конструктивной критике))
Миниатюры
Выделение памяти  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 20:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru