Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 40

Исключение в деструкторе

28.05.2021, 23:47. Показов 2812. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, при завершении программы исключение кидает в деструктор и пишет: Вызвано исключение: нарушение доступа для записи.
**this** было 0x67965E40.
Начало выбивать после добавления метода push_back в Clients_Container.cpp
Заранее благодарю
Коды:
main.cpp
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
#include "Date.h"
#include "Person.h"
#include "Client.h"
#include "Clients_Container.h"
#include "Worker.h"
#include "Bed.h"
#include <vector>
 
 
int main() {
    srand(time(NULL));
    Date Date_1(25, 05, 2021);
    Clients_DB DB_1(3);
 
    Client Client_1("Mikhail", "Zubenko", 44, "Kharkiv", 1);
    cout << "Client" << endl;
    Client_1.print_Info();
    DB_1.push_back(&Client_1);
    Bed Bed_1(0, 0, 500, 114);
    Bed_1.own(DB_1[0]);
    cout << "DB_1[0]" << endl;
    DB_1[0].print_Info();
    cout << "Client" << endl;
    Client_1.print_Info();
    cout << "Bed" << endl;
    Bed_1.print_Info();
    system("pause");
    return 0;
}
Client.cpp
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
#include "Client.h"
Client::Client() {
    set_room_Number(101);
    set_check_in_Date("1.1.2001");
}
Client::Client(string n, string s, int a, string c, bool p, int rn, string cid) {
    name = n;
    surname = s;
    age = a;
    city = c;
    privileges = p;
    room_Number = rn;
    check_in_Date = cid;
}
Client::Client(const Client& copy) {
    name = copy.name;
    surname = copy.surname;
    age = copy.age;
    city = copy.city;
    privileges = copy.privileges;
    room_Number = copy.room_Number;
    check_in_Date = copy.check_in_Date;
}
Client::~Client() {};
int Client::get_room_Number() {
    return room_Number;
}
 
Client& Client::operator=(const Client& C) {
    if (&C == this) {
        return *this;
    }
    name = C.name;
    surname = C.surname;
    age = C.age;
    city = C.city;
    privileges = C.privileges;
    room_Number = C.room_Number;
    check_in_Date = C.check_in_Date;
}
 
void Client::set_room_Number(int rn) {
    room_Number = rn;
}
string Client::get_check_in_Date() {
    return check_in_Date;
}
void Client::set_check_in_Date(string cid) {
    check_in_Date = cid;
}
 
void Client::print_Info() {
    cout << "Name: " << name<<endl;
    cout << "Surname: " << surname << endl;
    cout << "Age: " << age << endl;
    cout << "City: " << city << endl;
    cout << "Privileges: " << privileges << endl;
    cout << "Room number: " << room_Number << endl;
    cout << "Check-in date: " << check_in_Date << endl;
    cout << "\n----------------------\n";
}
Clients_Container.cpp
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
#include "Clients_Container.h"
Clients_DB::Clients_DB() {
    size = 0;
    data = nullptr;
}
Clients_DB::Clients_DB(int size) {
    if (size > 0) {
        data = new Client[size];
    }
    else {
        data = nullptr;
    }
}
Clients_DB::~Clients_DB() {
    for (int i = 0; i < size; i++) {
        delete[] data;
    }
}
 
void Clients_DB::erase() {
    delete[] data;
    data = nullptr;
    size = 0;
}
 
Client& Clients_DB::operator[](int ind) {
    if (ind >= 0 && ind < size) {
        return data[ind];
    }
}
int Clients_DB::get_Size() {
    return size;
}
 
void Clients_DB::reallocate(int s) {
    erase();
    if (s <= 0) {
        return;
    }
    data = new Client[s];
    size = s;
}
void Clients_DB::push_back(Client* C) {
    if (size == 0) {
        data = new Client;
        data = C;
        size++;
    }
    else {
        this->reallocate(size + 1);
        size++;
        data = C;
 
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2021, 23:47
Ответы с готовыми решениями:

После закрытия консоли выплывает необработанное исключение, delete в деструкторе
class X{ float *xo,*yo,*zo,*fo; public: X(); ~X(){}; friend void run(X x); friend void print(X x); };

Объект в деструкторе
Господа, выручайте, взрыв мозга )) using System; class a { public int u; ~a() {

Ошибка в деструкторе
Программа работает без ошибок и полный её код не выкладываю. Но при выходе из программы получаю вот такую ошибку: В программе я...

1
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
29.05.2021, 05:31
Цитата Сообщение от romcheg Посмотреть сообщение
void Clients_DB:ush_back(Client* C) {
    if (size == 0) {
        data = new Client;
        data = C;
        size++;
    }
    else {
        this->reallocate(size + 1);
        size++;
        data = C;
}
хотя бы так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Clients_DB::push_back(Client* C) {
    if (size == 0) {
        data = new Client;
        *data = *C;
        size++;
    }
    else {
        this->reallocate(size + 1);
        size++;
        *data = *C;
    }
}
romcheg,
и проверьте на соответствие:
Распространенные ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.05.2021, 05:31
Помогаю со студенческими работами здесь

Падает на деструкторе
После выполнения основного кода программы, стоит ожидание нажатия клавиши,а следом вызывает дестрой(2 разных, написаных в 2 разных юнитах в...

Ошибка в деструкторе
Когда удаляю объект класса hotel, в деструкторе вызывается delete для поля этого объекта - динамически созданного связного списка. И...

Повисание в деструкторе
Есть такой код: //staff.h class staff abstract { protected: int salary; char* name; char* id; static staff* start;

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

Ошибка в деструкторе
есть базовый абстрактный класс и есть производный от него: #ifndef EMPLOY_H #define EMPLOY_H class Employee { public: ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru