Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сравнить наибольший по модулю элемент строки с наименьшим по модулю элементом побочной диагонали матрицы https://www.cyberforum.ru/ cpp-beginners/ thread2495071.html
Дана матрица А(5на5). Определить массив Х из 5 элементов, каждый из которых равен 1, если наибольший по модулю элемент соответствующей строки совпадает с наименьшим по модулю элементом побочной...
Как установить компилятор C++? C++
Помогите с установкой компилятора. Я делал по такой инструкции: 1)Скачиваю и устанавливаю mingw64. 2)Скачиваю и устанавливаю Code blocks. Итог: IDE не находит компилятор. Visual Studio религия...
C++ Инициализация массива в конструкторе https://www.cyberforum.ru/ cpp-beginners/ thread2495025.html
подскажите пожалуйста, по условиям задачи необходимо создать массив int #include <iomanip> #include <cstdlib> using std::rand; using std::srand; #include <ctime> using std::time; using...
C++ Сортировка вектора структур по совпадению string https://www.cyberforum.ru/ cpp-beginners/ thread2494957.html
В игре я хочу написать некое подобие ajax формы поиска как на сайтах, но сортируя вектор. Допустим человек вводит 2-3 буквы, я нахожу совпадения и перемещаю их в начало. struct TES { int...
SFML C++ взаимодействие с картой C++
Здравствуйте, возникла проблема со взаимодействием персонажа с картой, запускаю программу, персонаж может ходить и тп, но когда притрагиваюсь к стене, прога крашится по причинам выход из диапазона...
C++ Как разобраться с пробелами? Нужно сделать так, чтобы между месяцами было 3 пробела. На каждое число отводится 2 позиции. При этом между этими числами должен стоять 1 пробел. Сейчас есть вот это. Но между месяцами, когда один... https://www.cyberforum.ru/ cpp-beginners/ thread2494874.html
C++ C++ или C# https://www.cyberforum.ru/ cpp-beginners/ thread2494835.html
Хотел написать видеоплеер на C++, но в интернете увидел больше примеров написания на C#. Возник вопрос что лучше C++ или C#. И какой из языков сейчас больше всего используется для написания программ...
C++ Фибоначи намбер - Задача
Вот решил задачу #include <iostream> using namespace std; int factorial (int a, int b, int fact){ if (b == a){ cout << fact; return 0; } fact = fact * b;
C++ Монотонность последовательности https://www.cyberforum.ru/ cpp-beginners/ thread2494749.html
Всем привет. Помагите пожалуйста найти ошибку в моем коде. (Использвав #include <iostream> #include <vector>) На вход программы дается целое положительное число N большее единицы (N>1) и...
C++ Классы и перегрузка операций Добрый день. Изучаю в данный момент классы и перегрузку операций. Столкнулся с парой непонятных вещей, подскажите пожалуйста. 1)У Дейтлов в книге есть пример ими созданного класса Array, для... https://www.cyberforum.ru/ cpp-beginners/ thread2494732.html
C++ Слово из трех букв*
Всем привет. Помагите найти ошибку в моем коде. Задано слово из трех букв. Слово состоит только из латинских букв, маленьких и больших. Вывести то же слово, где первая буква заглавная, остальные...
C++ Проблемы с swith - case Добрый день, товарищи программисты! Нужен свежий взгляд со стороны, ибо у меня уже руки опускаются - а в чем ошибки понять не могу. Планировал в конце вывести вариант, который выбрал пользователь,... https://www.cyberforum.ru/ cpp-beginners/ thread2494724.html
26 / 18 / 8
Регистрация: 08.06.2015
Сообщений: 470
0

Ошибка при удалении объекта - C++ - Ответ 13796695

29.08.2019, 14:14. Показов 1075. Ответов 4
Метки (Все метки)

Здравствуйте,
создаю объекты класса и укладываю в массив. После энного времени объект должен удалиться. Код компилируется, но как только доходит до точки delete this выскакивает ошибка. Подскажите, что не так делаю

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
#include <cstdlib>
#include <iostream>
#include <ctime>
 
using namespace std;
int workhour = 8;
int workminute = 0;
int nexttime;
int guest = 0; // general count of guests
int sits = 20; // count of the tables
int guest_anzahl = 0;
int free_sits=sits; 
int guest_ord = 0; // ordinal number of the guest
 
class Guest{
    public:
        int hour_of_arrival; 
        int minute_of_arrival;
        string message;
        Guest() {
        hour_of_arrival = workhour;
        minute_of_arrival = workminute;
        }
        ~Guest(){
            cout << "The guest gone out" << endl;
        }
        
        void guest_first_time(int work_hour) {
        if (work_hour >= hour_of_arrival + 1){
            guest--;
            free_sits++;
            delete this; // при срабатывании этой строчки запущенный код ломается
            } 
        else {
            cout << "The guest still sits at the table" << endl;
        }
    }
    void guest_hello(string hello){
        message = hello;
    }
};
 
void show_time(){
    if (workminute < 10){
    cout << "Time: " << workhour << ":0" << workminute << endl;
}
else {
    cout << "Time: " << workhour << ":" << workminute << endl;
}
}
void time_count(int nexttime){ // count of time
    workminute += nexttime;
    workhour += workminute/60;
    if (workminute >=60)    workminute = workminute%60;
    }
int guest_anzahl_random(){ // random count of guests
    int gue_max = 4;
    int gue_min = 0;
    int gue_max_primetime = 12;
    int guest_anzahl;
    if (((workhour >= 13)&&(workhour <= 14))||((workhour >= 18)&&(workhour <= 20))){
        guest_anzahl = rand()%(gue_max_primetime+gue_min);
    }
    else guest_anzahl = rand()%(gue_max+gue_min);
    return guest_anzahl;
} 
 
int main(int argc, char** argv) {
srand(time(0));
Guest guest_arr[30];
 
while (workhour < 24){
    
    
    if ((free_sits > 0)&&(workhour >= 12)){
        guest_anzahl = guest_anzahl_random();
        guest += guest_anzahl;
        free_sits = sits - guest;
        
        for (int i=0; i < guest_anzahl; i++){
                //new_guest();
                Guest a1 = new Guest();
                guest_arr[guest_ord] = a1;
                guest_arr[guest_ord].guest_hello("Hi");
                cout << "The new guest say " << guest_arr[guest_ord].message << endl;
                guest_ord++;
                cout << "The guest " << guest_ord << " has " << guest_arr[guest_ord].money << " euro" << endl;
        }
        
    cout << "There are " << free_sits << " free sits from " << sits << " sits" << endl;
    }
    else if (workhour < 12) cout << "The guests come after 12:00" << endl;
    else {
            cout << "There are no more sits" << endl;
            
        }
    
    show_time();
    
    for (int i = 0; i < sizeof(guest_arr); i++){
        if (guest_arr[i].message != "Hi"){ // if the cells of array are already empty, the for should be broken
            break;
        }
        else {
        
        int nextGuest; 
        cout << " Guest " << i+1 << " came at " << guest_arr[i].hour_of_arrival << ":" << guest_arr[i].minute_of_arrival << endl;
        guest_arr[i].guest_first_time(workhour);
        cin >> nextGuest;
        }
    }
    cout << "How many minutes do you want to miss? " << endl;
    cin >> nexttime;
    time_count(nexttime);
    
}
 
cout << "The day is over. It's time to sleep!";
 
    return 0;
}


Вернуться к обсуждению:
Ошибка при удалении объекта C++
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2019, 14:14
Готовые ответы и решения:

Требуется ли при удалении объекта посредством delete указывать тип объекта?
например, есть указателиvoid *p1; void *p2; есть VCL-объект TButton, есть самописный класс...

Ошибка при удалении массива
Программа работает нормально, но в конце при удалении выдает ошибку &quot;Invalid address specified to...

Ошибка при удалении массива
Проблема в том, что при попытке добавить строки удаления массивов программа вылетает, если же их...

Ошибка при удалении класса
Доброго времени суток! Есть класс: class Sector { public: Sector(); ~Sector(); private:...

4
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2019, 14:14

Ошибка при удалении динамических массивов
#include &lt;iostream&gt; int main() { setlocale(LC_ALL, &quot;rus&quot;); int m, a, c, x0, x_minus, size =...

Ошибка при удалении данных из программы
Столкнулся с такой проблемой (смотри скриншот). До добавления очистки указатель и динамических...

Ошибка при удалении динамического массива
Непонятная мне ошибка при удалении массива #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

Ошибка при удалении из односвязного списка
Написал код, но при удалении элемента из списка у которого есть значение 2 выдаёт ошибку. Помогите...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.