Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
2 / 2 / 2
Регистрация: 21.08.2010
Сообщений: 216
1

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

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

Author24 — интернет-сервис помощи студентам
Всем привет ! Есть класс
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2013, 13:54
Ответы с готовыми решениями:

Ошибка при вызове деструктора (при вызове delete в деструкторе)
Не могу найти ошибку, при вызове деструктора от класса, который был создан при помощи конструктора...

Ошибка при вызове деструктора
Добрый вечер! Почему при вызове деструктора вылетает ошибка после компиляции кода? #include...

Ошибка при вызове деструктора
По окончании программы выдает ошибку #include &lt;string.h&gt; #include &lt;iostream&gt; using namespace...

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

6
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 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
2 / 2 / 2
Регистрация: 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
Неэпический
18099 / 10685 / 2061
Регистрация: 27.09.2012
Сообщений: 26,895
Записей в блоге: 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
18 / 18 / 3
Регистрация: 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
18 / 18 / 3
Регистрация: 16.09.2013
Сообщений: 126
28.10.2013, 15:15 7
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


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

)Да чет я и не подумал)))
0
28.10.2013, 15:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2013, 15:15
Помогаю со студенческими работами здесь

Ошибка при вызове деструктора
Здравствуйте, помогите разобраться с проблемой, она довольно распространенная и на форуме куча...

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru