Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Есть ошибка з циклом(посмотрите пожалуста) Разработать функцию разбора заданной текстовой строки (задается параметром командной строки ), содержащий произвольную последовательность чисел ( от 0 до 9). Функция должна найти и вывести на экран все возможные числа , образованные с помощью введенного набора чисел. //#include "stdafx.h" #include <iostream> #include <cstdlib> using namespace std; https://www.cyberforum.ru/ cpp-beginners/ thread1466920.html C++ Считать и записать данные из файлов. Хранение записей в памяти организовать в виде двоичного дерева поиска
помогите пожалуйста, Во входном файле input.txt находятся записи вида имя значение, причем имена могут повторяться. В файл output.txt выдать итоговые значения всех переменных в алфавитном порядке. Хранение записей организовать в виде двоичного дерева поиска. Пример. Ввод: input.txt A 10 B 20 A 15
C++ Записать в память и хранить в ней данные любого типа https://www.cyberforum.ru/ cpp-beginners/ thread1466893.html
Добрый день. Разбираюсь с типами данных в С++. В частности каким образом осуществляется преобразование типов данных. Сделал программу. Идея такая: Написать функцию, которая позволит записать в память и хранить в ней данные любого типа. Есть программа: Файл : "CppLib.h" #include <vector> using namespace std; struct Stash { int size; // Size of each space int quantity; // Number...
C++ Перевернуть число https://www.cyberforum.ru/ cpp-beginners/ thread1466889.html
Вводится число. Преобразовать его в другое число, цифры которого будут следовать в обратном порядке по сравнению с введенным числом.
C++ Прокомментируйте код
// Лесик.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<iostream> #include<math.h> using namespace std; int _tmain(int argc, _TCHAR* argv)
C++ Как проверить на утечку памяти (Сор если не в тот раздел) Короче есть огоромный проэкт на милионы строк, нужно проверить на то чтобы в каждой функции где есть malloc выззывался free, скачал cppcheck plugin но он не запускается пишет ошибку, есть ли другой рабочий софт или стандартный способ сделать данную проверку? https://www.cyberforum.ru/ cpp-beginners/ thread1466870.html
C++ Protected в классах https://www.cyberforum.ru/ cpp-beginners/ thread1466869.html
#include <iostream> using namespace std; class TPoint{ protected: int x,y; TPoint *t; public:
C++ перевести прогу с матлаб на с++
Всем привет! все не могу перевести программу с матлаб на с++... function f = a(ki,kj,x) f=om(ki)*om(kj)*(sign1(x)+3*sign2(x)*ki*kj+5*sign3(x)*p2(ki)*p2(kj)+7*sign4(x)*p3(ki)*p3(kj)); end function f = om(x) f=1/sqrt(1+3*x^2+5*(p2(x))^2+7*(p3(x))^2); end function f = p2(x)
C++ Шаблоны Здравствуйте. Читая про шаблоны в Википедии (https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_C%2B%2B) затормозил на этом месте: Если параметр шаблона можно вывести по нескольким аргументам, то результат выведения должен быть в точности одинаков для всех этих аргументов. Например, следующие вызовы ошибочны: min (0, 'a'); min (7, 7.0); Вот как я представляю... https://www.cyberforum.ru/ cpp-beginners/ thread1466866.html C++ Определить разрядность введенного пользователем целого числа Пользователь вводит целое число. Посчитать знакопеременную сумму его цифр, но так, чтобы цифра в его первом разряде всегда имела знак +. (6543= +6-5+4-3 = 2) . Поменять местами наибольший элемент с наименьшим. спасибо за ранее https://www.cyberforum.ru/ cpp-beginners/ thread1466858.html
Объединение в один класс C++
Добрый день, можете помочь в написании программы. Буду очень признателен. Известны следующие признаки делимости числа n: a) для делимости на 5 необходимо, чтобы последняя цифра числа была 0 или 5 b) для делимости на 8 необходимо, чтобы число из последних 4 цифр делилось на 8 c) для делимости на 9 необходимо, чтобы сумма цифр числа делилась на 9 d) для делимости на 11 необходимо, чтобы...
C++ Структуры: "Справочная служба железнодорожного вокзала" https://www.cyberforum.ru/ cpp-beginners/ thread1466853.html
задание следующее: Создать программу справочной службы железнодорожного вокзала. Структурный шаблон должен содержать: номер поезда, станцию назначения, название остановок (ограничить шестью), время отправления, наличие билетов. По запросу пользователя предусмотреть - вывод информации об отправление поездов в указанный пункт назначе-ния (пунктом назначения может служить как конечная станция,...
0 / 0 / 2
Регистрация: 17.10.2013
Сообщений: 66
0

Использование New и Delete - C++ - Ответ 7710937

03.06.2015, 10:49. Показов 404. Ответов 6
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые форумчане, помогите поправить программу.
Программа реализует дек с использованием New и Delete. Но не запускается. Программа "падает" на вводе второго строкового массива, а именно тут:
C++
1
*elem->str = new char (**elem->str);
. Пробовал писать по разному, но ни к чему хорошему это ни привело.

Заранее благодарен.

Полный код программы:
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
#include <iostream>
#include <string>
#include <stdlib.h>
#include <Windows.h> 
#include <fstream>
 
using std::cin;
using std::cout;
using std::string;
using std::to_string; 
 
struct Dek
{
    char **str;
    int *data;
    int size_m;
    struct Dek *next, *prev;
};
 
Dek *Head = NULL;
Dek *Tail = NULL;
 
short input();
void show_help();
 
template <typename T>
T input_test(const string &msg);
 
short change_inp(const short &a, const short &b, const string &msg);
 
Dek* input_elem();
void output_elem(Dek *elem);
 
void error_message();
 
void program();
 
void push_front();
void push_back();
void pop_back();
void pop_front();
 
int main(int argc, char argv[])
{   
    setlocale(LC_ALL, "rus");
    program();
 
   return 0;
}
 
void program()
{
    short cmd;
 
    do  { 
          cmd=input(); 
 
          switch (cmd)
          {
              case 1:push_back(); break;
              case 2:pop_back(); break;
              case 3:push_front(); break;
              case 4:pop_front(); break;
              case 6:show_help(); break;
              case 7:{ if (Head != NULL) output_elem(Head); else 
                        { error_message(); cout << "Дек пуст\n"; } break; }
              case 8:{ if (Tail != NULL) output_elem(Tail); else
                        {error_message(); cout << "Дек пуст\n";} break; }
              case 9:{ int i = 0; Dek *tmp = Head;
                          while (tmp != NULL) { i++; tmp = tmp->prev; }
                             cout << "Размер дека : " << i << "\n"; break; }
              case 10:{ Dek *tmp = Head; if (tmp == NULL) { error_message(); cout << "Дек пуст\n"; } else
                  while (tmp != NULL) { output_elem(tmp); tmp = tmp->prev; } break; }
              case 11:{ Dek *tmp = Tail; if (tmp == NULL) { error_message(); cout << "Дек пуст\n"; } else
                  while (tmp != NULL) { output_elem(tmp); tmp = tmp->next; } break; }
              case 12:{ Dek *tmp = Tail; if (tmp == NULL) { error_message(); cout << "Дек пуст\n"; } else
                        { while (tmp != NULL) { tmp = tmp->next; delete tmp; } cout << "Дек очищен\n";
                          Head = NULL; Tail = NULL;}    break; }
             default:
                  break;
          }
        } while (cmd != 5);
}
 
void error_message()
{
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    cout << "Error: ";
}
 
void show_help()
{
    char a[100];
        std::ifstream fin("help.txt");
    if (!fin.is_open()) cout << "Ненайден файл справки";
        while (!fin.eof()) {
            fin.getline(a, 100);
                cout << a << "\n";
    }
}
 
Dek* input_elem()
{
    Dek *elem = new Dek; /* (Dek*)calloc(1, sizeof(Dek));*/
        const int size = change_inp(1, 1000, "Введите размер массивов от 1 до 1000: ");
 
    elem->size_m = size;
 
    elem->data = new int; /* (int*)calloc(size, sizeof(int));*/
        cout << "\nВведите элементы массивов\n*******************************\n";
    for (int i = 0; i < size; i++)
        elem->data[i] = input_test<int>("Введите [" + to_string(i + 1) + "] элемент массива<int>: ");
 
    cout << "\n";
 
    //char **str;
    //int *data;
    //int size_m;
    //struct Dek *next, *prev;
 
 
    *elem->str = new char (**elem->str);  /*(char**)calloc(size, sizeof(*elem->str));*/
    for (int i = 0; i < size; i++)  
    {
        elem->str[i] = new char[*elem->str[i]]; /*(char*)calloc(256, sizeof(*elem->str[i]));*/
         cout << "Введите [" + to_string(i + 1) + "] элемент массива<string>: ";
         cin >> elem->str[i];
         cin.ignore(256, '\n');
         cin.clear();
    }
 
        cout << "\n";
 
    return elem;
}
 
void output_elem(Dek *elem)
{
    cout << "Массив <int> : ";
        for (int i = 0; i < elem->size_m;i++)
        {
            cout << "{" << elem->data[i] << "} ";
        }
 
        cout << "\n";
 
    cout << "Массив <string> : ";
        for (int i = 0; i < elem->size_m; i++)
        {
            cout << "{" << elem->str[i] << "} ";
        }
        
        cout << "\n\n";
}
 
void push_back()
{
    Dek *elem = input_elem();
 
    if (Tail == NULL) {
        elem->next = NULL;
        elem->prev = NULL;
        Head = elem;
        Tail = elem;
    }
    else
    {
        elem->prev = NULL;
        Tail->prev = elem;
        elem->next = Tail;
        Tail = elem;
    }
}
 
void push_front()
{
    Dek *elem = input_elem();
    
    if (Head == NULL) {
        elem->next = NULL;
        elem->prev = NULL;
        Head = elem;
        Tail = elem;
    }
    else
    {
        elem->next = NULL;
        Head->next = elem;
        elem->prev = Head;
        Head = elem;
    }
}
 
void pop_front()
{
    if (Head == NULL) 
    {
        error_message(); cout << "Дек пуст\n"; 
    }
    else
        {
                output_elem(Head);
                Dek *del = Head;
                Head = Head->prev;
                if (Head!=NULL) Head->next = NULL;
                if (Head == NULL) Tail = Head;
                    /*realloc(del->data, 0);*/
                delete del->data;
                for (int i = 0; i < del->size_m; i++)
                    /*  realloc(del->str[i], 0);
                    realloc(del->str, 0);
                    realloc(del,0);*/
                delete del->str[i];
                delete del->str;
                delete del;
                    
        }
}
 
void pop_back()
{
    if (Tail == NULL)
    {
        error_message(); cout << "Дек пуст\n";
    }
    else
    {   
        output_elem(Tail);
        Dek *del = Tail;
        Tail = Tail->next;
        if (Tail!=NULL) Tail->prev = NULL;
        if (Tail == NULL) Head = Tail;
            /*realloc(del->data, 0);*/
        delete del->data;
        for (int i = 0; i < del->size_m; i++)
            /*realloc(del->str[i],0);
            realloc(del->str, 0);
            realloc(del, 0);*/
        delete del->str[i];
        delete del->str;
        delete del;
    }
}
 
short change_inp(const short &a, const short &b, const string &msg)
{    
    short change; bool accept;
    do { 
        change = input_test<int>(msg);
        accept = change < a || change > b;
        if (accept)
        {
            error_message();
             cout << "значение не входит в множество предложеное вам\n";
        }
       } while (accept);
    return change;
}
 
short input()
{
    string input_data; bool accept = false; const int size_m = 12; short num_cmd;
    const string comand_input[size_m] = {"push_back","pop_back", "push_front","pop_front",
                                            "exit", "help","show_head","show_tail","show_size","show_dek_h", "show_dek_t","clear" };
    do {
        cin.clear();
        cout << "Введите команду, для помощи используйте команду 'help'\n> ";
        getline(cin, input_data);
        input_data += '\n';
        for (short i = 0; i < size_m; i++)
        {
            const int k = input_data.find(comand_input[i]);
             if (k != string::npos)
                  accept = (input_data[k + comand_input[i].size()] == 13 || 32);
             if (accept){
                 num_cmd = i + 1; break;
             }
        }
          cin.clear();
          if (!accept) {
              error_message(); cout << "неизвестная команда или пустой ввод\n\n";
          }
    } while (!accept);
    return num_cmd;
}
 
template <typename T>
T input_test(const string &msg)
{
    T size_m;
    bool accept;
    string end_of_input = "\t\r\n ";
    do {
        cout << msg;
        cin >> size_m;
        accept = end_of_input.find(cin.peek()) != string::npos;
        if (!accept) {
            error_message();
            cout << "Не веверный формат данных\n";
            cin.clear();
        }
        cin.ignore(INT_MAX, '\n');
    } while (!accept);
 
    return size_m;
}


Вернуться к обсуждению:
Использование New и Delete C++
Вложения
Тип файла: txt help.txt (393 байт, 1 просмотров)
Тип файла: txt Исходный кодcpp.txt (6.6 Кб, 1 просмотров)
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2015, 10:49
Готовые ответы и решения:

Использование realloc наряду с new и delete
Можно ли использовать realloc наряду с new и delete? Ведь new использует malloc, а delete...

Утечка памяти, правильное использование new/delete
Здравствуйте. Написал программку, где работаю с передачей контейнера QList методом сигналов и...

Как запретить использование клавиши Delete в текстовом окне?
В KeyPress запрет на ввод символа: e.KeyChar = Nothing. Некоторые клавиши в KeyPress не...

Использование операторов SELECT, DELETE и UPDATE в одном запросе в PDO
возможно ли в одном запросе к базе использовать операторы SELECT, DELETE и UPDATE если можно то как...

6
03.06.2015, 10:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2015, 10:49
Помогаю со студенческими работами здесь

Написать аналог процедуры Delete. Процедурой Delete и функцией Copy не пользоваться
Написать аналог процедуры Delete. Процедурой Delete и функцией Copy не пользоваться. кто сможет?...

Используя delete по указателю, возвращенному new [] или delete [] указателем, возвращаемым new
Помогите ответить на вопрос, не могу понять суть вопроса (правильно ли понимаю, что будет если...

Какая разница между delete и delete[]
Нашел информацию на разных сайтах и всё равно остались вопросы. Я понимаю, что delete используется...

В чем разница между delete и delete[]?
а можете еще по подробней рассказать про delete, точнее даже delete, чем именно отличается delete...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru