84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
1

Почему не работает деструктор?

18.05.2015, 19:36. Показов 1893. Ответов 11
Метки нет (Все метки)

Собственно говоря, почему?
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
#include <iostream>
using namespace std;
class Osoba{
public :
    char* imie;
    int wiek;
    Osoba(char * imie, int wiek) :
        imie(imie), wiek(wiek){
        cout << "Stworzona osoba: " << this->imie << endl;
    };
    Osoba(){
        this->imie = new char[];
        this->wiek;
        cout << "Stworzona pusta osoba" << endl;
    };
    void show(){
        cout << this->imie << " " << this->wiek << endl;
    };
    ~Osoba(){
        cout << "Osoba " << this->imie << " zniszczona" << endl;
        delete[] imie;
    };
};
 
int main(){
    Osoba *o1 = new Osoba("Ira", 17);
    o1->show();
 
    Osoba &ref = *o1;
 
    delete o1;
 
    system("Pause");
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2015, 19:36
Ответы с готовыми решениями:

Почему не работает деструктор?
Подскажите пожалуйста, почему у меня не работает деструктор? #include &lt;iostream.h&gt; #include...

Почему деструктор не работает?
Вроде написал все правильно, а почему то деструктор не работает, данные HI не выводит, почему ? ...

Почему деструктор работает неправильно?
на лабараторной столкнулся в проблемой. деструктор вызывается только один раз. #include &lt;cstring&gt;...

почему деструктор работает вначале?
#pragma once class Student { private: char* name; int course; public: ...

11
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
18.05.2015, 19:42 2
Она вообще компилироваться не должна из-за: new char[];
13-я строка бессмысленная.
Деструктор работает.
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 19:43 3
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

В 21 строке попытка освободить память, которая не выделена динамически (в конструктор передается строковый литерал).
1
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
18.05.2015, 19:45  [ТС] 4
Компилируется и отлично работает, проблема с уничтожением объекта - вылетает.

Добавлено через 1 минуту
А как тогда исправить и выделить память динамически?
0
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.05.2015, 19:47 5
Цитата Сообщение от Vaderkos Посмотреть сообщение
Компилируется и отлично работает, проблема с уничтожением объекта - вылетает.
попытайтесь прочитать вдумчиво.

Программа не должна компилироватся!

Добавлено через 2 минуты
C++
1
this->imie = new char[5];
Мне нужно 5 переменных подряд типа char
C++
1
this->imie = new char[17];
Мне нужно 17 переменных подряд типа char
C++
1
this->imie = new char[];
Мне нужно ....

Найдите отличия
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
18.05.2015, 19:50  [ТС] 6
Этот конструктор я удалил, он уже не нужен(из предыдущего задания). Во время уничтожения обьекта вылетает ошибка.
0
Эксперт С++
4978 / 3085 / 456
Регистрация: 10.11.2010
Сообщений: 11,164
Записей в блоге: 10
18.05.2015, 19:52 7
Цитата Сообщение от Vaderkos Посмотреть сообщение
Этот конструктор я удалил
А зачем ты показываешь нам конструктор который уже удалил?
0
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
18.05.2015, 19:54  [ТС] 8
Так как он остался с предыдущего задания а ошибка у меня в деструкторе.
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 19:55 9
Цитата Сообщение от Vaderkos Посмотреть сообщение
ошибка у меня в деструкторе.
В третьем посте даже написано какая.
0
2548 / 1207 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.05.2015, 19:57 10
Лучший ответ Сообщение было отмечено Vaderkos как решение

Решение

Вторая ошибка - вы пытаетесь очистить память, которая вам не пренадлежит (программа создала в памяти строковый литерал, а вы такой волосы назад решили ей командовать и удалять когда вам вздумается. Да кто вы такой? Страуструпу только подвласна даная магия!!! )
1
84 / 83 / 8
Регистрация: 31.03.2015
Сообщений: 447
18.05.2015, 20:03  [ТС] 11
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
#include <iostream>
using namespace std;
class Osoba{
public :
    char* imie;
    int wiek;
    Osoba(char * imie, int wiek) {
        this->imie = new char[strlen(imie) + 1];
        //this->imie = imie;
        this->wiek = wiek;
        cout << "Stworzona osoba: " << this->imie << endl;
    };
    void show(){
        cout << this->imie << " " << this->wiek << endl;
    };
    ~Osoba(){
        cout << "Osoba " << this->imie << " zniszczona" << endl;
        delete[] imie;
    };
    Osoba(Osoba &o){
        this->imie = new char[strlen(o.imie) + 1];
        //this->imie = o.imie;
    }
};
 
int main(){
    Osoba *o1 = new Osoba("Ira", 17);
    o1->show();
 
    Osoba &ref = *o1;
    Osoba o2(ref);
    o2.show();
    
    delete o1;
    system("Pause");
    return 0;
}
Кажется я понял о чем вы говорите) Но каким тогда образом вбить imie?
0
3254 / 2056 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 20:08 12
Цитата Сообщение от Vaderkos Посмотреть сообщение
Но каким тогда образом вбить imie?
Если совсем по-хорошему, то использовать std::string вместо char*.
Если требуется по-сишному, то как обычно. Выделили память (уже сделано), скопировали содержимое строки (напр. strcpy).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2015, 20:08
Помогаю со студенческими работами здесь

Почему создается виртуальный деструктор A, а в таблице виртуальных функций лежит деструктор B
Почему я делаю виртуальным деструктор A, а в таблице виртуальных функций лежит деструктор B?

Почему не вызывается деструктор?
Всем доброго времени суток! Подскажите пожалуйста - почему не вызывается деструктор при...

Почему не отрабатывает деструктор?
class test { public: double *b; test(); ~test(); } test::test() {

Почему вызывается деструктор?
Доброго времени суток. Написал такой код: struct O { virtual ~O() { cout...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

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