Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
#1

Ошибка при вызове деструктора - C++

28.10.2013, 13:54. Просмотров 324. Ответов 6
Метки нет (Все метки)

Всем привет ! Есть класс
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
class building                              
{
private:
    string *location_street;
    unsigned int *number_of_building;
public : 
    building()
    {
        location_street = new string("Default");
        number_of_building = new unsigned int (0);
    }                                   //дефолтний конструктор
 
 
    string getLocation_steet()
    {
        string tmp = *location_street;
        return tmp;
    }
    void setLocation_street(string *location)
    {
        location_street=location ;
    }
 
    int getNumber_of_building()
    {
        int tmp= *number_of_building;
        return tmp;
    }
    void setNumber_of_building(unsigned int * numb)
    {
        number_of_building= numb;
    }
    virtual ~building()                     //віртуальний деструктор
    {
        delete building::location_street;
        delete building::number_of_building;
    }
};
Вроде-бы Работает, но при попытке освободить память
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int _tmain(int argc, _TCHAR* argv[])
{
    string s;
    unsigned int num = 52;
    cout<<"ENTER IT!\n";
    getline(cin,s);
    building *b = new building;
    b->setLocation_street(&s);
    b->setNumber_of_building(&num);
    cout<<b->getLocation_steet()<<","<<b->getNumber_of_building()<<endl;
    delete b;                                                       //  если от этого отказаться то ошибка не вылетает 
 
    system("pause");
    return 0;
}
0
Миниатюры
Ошибка при вызове деструктора  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 13:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при вызове деструктора (C++):

Ошибка при вызове деструктора - C++
Не могу дописать лабу... Надо создать 4 класса, описать поля и методы. Выкладываю исходники: Самый главный класс - Order. Выбивает ошибку в...

Ошибка при вызове деструктора - C++
Программа компилиться нормально,но после выполнения system(&quot;pause&quot;); выползает непонятное окно,и указывает на ошибку в деструкторе.В чем...

Ошибка при вызове деструктора - C++
Добрый вечер! Почему при вызове деструктора вылетает ошибка после компиляции кода? #include &lt;conio.h&gt; #include &lt;iostream&gt; #include...

Ошибка при вызове деструктора - C++
Подскажите, что не так с этим деструктором? Просто выдает ошибку. Если его убираю то все идет норм. Если же оставляю, то куча всяких...

Ошибка при вызове деструктора - C++
По окончании программы выдает ошибку #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace std; class nik //объявление...

При вызове деструктора выдается ошибка _BLOCK_TYPE_IS_VALID (pHead->nBlockUse) - C++
Вопрос на форуме поднимался раз 100, но все равно не могу понять в чем проблема. Знаю, что искать нужно в setSpace() и getFlat(). Но что...

6
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
28.10.2013, 14:04 #2
C++
1
location_street=location
присваиваете указатели, в результате чего получаете
1) Утечку памяти, т.к. больше нет указателя на выделенную в конструкторе память
2) location содержит адрес объекта s, который выделен на стеке функции и применять к нему delete нельзя

Добавлено через 56 секунд
C++
1
number_of_building= numb;
тут тоже самое.
1
seruy-t
2 / 2 / 0
Регистрация: 21.08.2010
Сообщений: 216
28.10.2013, 14:11  [ТС] #3
Croessmah, Извините, но , кажется, я вас не совсем понял.

C++
1
2
3
4
void setLocation_street(string location)
    {
        *location_street=location ;
    }
Должно быть так ?


Цитата Сообщение от Croessmah Посмотреть сообщение
2) location содержит адрес объекта s, который выделен на стеке функции и применять к нему delete нельзя
Это понял, но знаю что с этим делать.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
28.10.2013, 14:31 #4
C++
1
2
3
4
    void setLocation_street(const string * location)
    {
        *location_street=*location ;
    }
C++
1
2
3
4
    void setLocation_street(const string & location)
    {
        *location_street=location ;
    }
1
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
28.10.2013, 14:45 #5
Совсем не разбираюсь в этом)))
Так просто интересная тема, изучаю)
и вот у вас в 14ой строке
C++
1
string getLocation_steet()
так и должно быть,?
Просто везде street а тут steet...
0
Croessmah
28.10.2013, 14:51
  #6

Не по теме:

Цитата Сообщение от Alex_Skripa Посмотреть сообщение
так и должно быть,?
А потом везде студия "подсказала" правильный вариант

1
Alex_Skripa
18 / 18 / 1
Регистрация: 16.09.2013
Сообщений: 126
28.10.2013, 15:15 #7
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


А потом везде студия "подсказала" правильный вариант

)Да чет я и не подумал)))
0
28.10.2013, 15:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 15:15
Привет! Вот еще темы с ответами:

При вызове деструктора возникает ошибка Debug Assertion Failed! - C++
вот код программы #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; class String { private:

При вызове деструктора вылазит ошибка _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) - C++
Понимаю,что подобный вопрос на форуме поднимался не раз,но разобраться не могу всё равно. Вот описание класса: class Stroka { ...

Проблемы при вызове деструктора - C++
В процессе работы программы указатель на класс Dictionary,который является членом класса DictionaryManager,должен указывать на разные...

_BLOCK_TYPE_IS_VALID при вызове деструктора класса - C++
при вызове деструктора моего класса вылетает ошибка _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse) конструкрор копирования создал и оператор =...


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

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

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