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

Ошибка с деструктором класса - C++

Восстановить пароль Регистрация
 
Siarhey
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 15
07.04.2016, 09:22     Ошибка с деструктором класса #1
Всем привет, здесь код .h файла с описанным классом. В классе 2 конструктора: 1-ый без аргументов 2-ой инициализации, в каждом из которых я выделяю динамически память для поля last_name и инициализирую его. Программа работает правильно, но после выполнения вызывается "точка останова" что не так?
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
#include <iostream>
using namespace std;
class account
{
public:
    int MAX = 50;
    account()
    {
        last_name = new char[MAX];
        last_name = "Skuratovich";
    }
    
    account(char *_last_name)
    {
        
        last_name = new char[MAX];
        strcpy_s(last_name, strlen(_last_name)+1, _last_name);
    }
 
 
    ~account() { delete[] last_name; } 
 
 
private:
    char *last_name;
};
Миниатюры
Ошибка с деструктором класса   Ошибка с деструктором класса  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
07.04.2016, 09:35     Ошибка с деструктором класса #2
10-я строка не верна. Используй strcpy().
Siarhey
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 15
07.04.2016, 10:53  [ТС]     Ошибка с деструктором класса #3
Точно, спасибо)

Добавлено через 1 час 8 минут
nmcf, а вот я ещё пытаюсь написать конструктор копирования и возникает та же ошибка(
C++
1
2
3
4
    account(account &copy)
    {
        last_name = _strdup(copy.last_name);
    }
nmcf
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
07.04.2016, 12:11     Ошибка с деструктором класса #4
Не используй эту функцию, она через malloc память выделяет. Делай как во втором конструкторе.
Siarhey
0 / 0 / 0
Регистрация: 04.04.2016
Сообщений: 15
08.04.2016, 10:06  [ТС]     Ошибка с деструктором класса #5
nmcf,
C++
1
2
3
4
5
6
account(account& copy)
    {
        last_name = new char[MAX];
        strcpy_s(last_name, strlen(copy.last_name) + 1, copy.last_name);
        cout << "я сработалъ!" << endl;
    }
я заметил, что у меня компилятор как-то игнорирует явно записанный конструктор копирования и использует тот, что по умолчанию
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
08.04.2016, 10:32     Ошибка с деструктором класса #6
Цитата Сообщение от Siarhey Посмотреть сообщение
как-то игнорирует
В чём это выражается?
Все конструкторы последовательно корректно вызываются
C++
1
2
3
 account a1;
 account a2("test");
 account a3(a2);
Yandex
Объявления
08.04.2016, 10:32     Ошибка с деструктором класса
Ответ Создать тему
Опции темы

Текущее время: 08:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru