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

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

Восстановить пароль Регистрация
 
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 16:57     Ошибка работы деструктора #1
Здравствуйте. Недавно начала программировать на C++, поэтому возможно жителям данного форума мой вопрос покажется сильно нубским. Тем не менее.
Имею класс
C++
1
2
3
4
5
6
7
8
class MyClass
{
private:
   int x,y,z;
public:
   MyClass(int=0;int=0;int=0);
   ~MyClass();
};
его конструктоp
C++
1
2
3
4
5
6
MyClass::MyClass(int x0, int y0, int z0)
{
x=x0;
y=y0;
z=z0;
}
деструктор
C++
1
2
3
4
5
6
MyClass::~MyClass()
{
delete &x;
delete &y;
delete &z;
}
и сам мейн, где по некоторому задаваему пользователем n создается массив из n обьектов класса примерно так
C++
1
2
3
MyClass* classes=new MyClass[n];
//а тут я вызываю деструктор
for (int i=0; i<n; i++) classes[i].~MyClass();
В итоге получаю _BLOCK_TYPE_IS_VALID (pHead->nBlockUse) при первом же вызове деструктора. Рискну предположить, что моя ошибка в отсутствии конструктора копирования, но как именно ее исправить в данной ситуации - теряюсь в догадках. Заранее спасибо за помощь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 16:57     Ошибка работы деструктора
Посмотрите здесь:

C++ Ошибка при вызове деструктора
C++ Ошибка деструктора
C++ ошибка при вызове деструктора!
C++ Ошибка при вызове деструктора
Особенности работы деструктора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.03.2013, 16:58     Ошибка работы деструктора #2
деструктор тут не нужен
delete должен удалять не только всё то, что выделялось оператором new
но и ТОЛЬКО то, и ничего больше.
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 17:00  [ТС]     Ошибка работы деструктора #3
допустим
C++
1
for (int i=0; i<n; i++) delete &classes[i];
аналогичная ошибка.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.03.2013, 17:06     Ошибка работы деструктора #4
деструктор не удаляет объекты. Ты не знал что ли?

Добавлено через 2 минуты
что такое classes ?
ещё раз. если у тебя в программе не нужна строчка classes[i]=new ...
то и строчка delete classes[i]; не нужна
к тому же, подозреваю, что брать & от classes вообще вредно
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 17:06  [ТС]     Ошибка работы деструктора #5
а что же он делает?
я же говорю, только начинаю использовать C++, и сильно туплю

classes - массив обьектов класса MyClass
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.03.2013, 17:10     Ошибка работы деструктора #6
Цитата Сообщение от sylvia Посмотреть сообщение
а что же он делает?
деинициализирует перед удалением, если можно так выразится.

Добавлено через 2 минуты
Цитата Сообщение от sylvia Посмотреть сообщение
//а тут я вызываю деструктор
А вот вызывать его ВООБЩЕ никогда не нужно.

Не по теме:

точнее иногда нужно, если ты пишешь свою перегруженную реализацию оператора delete для работы с каким-то адским самодельным менеджером памяти, например, но это редко бывает

sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 17:13  [ТС]     Ошибка работы деструктора #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Добавлено через 2 минуты

А вот вызывать его ВООБЩЕ никогда не нужно.
Странно. Преподаватель советовал как раз явный вызов деструктора. Не суть.
Насчет амперсанда - если мы имеем память, выделенную под обьекты через new - как иначе нам получить адрес этой памяти?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.03.2013, 17:13     Ошибка работы деструктора #8
короче, ближе к делу.
верно так!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MyClass
{
private:
   int x,y,z;
public:
   MyClass(int=0;int=0;int=0);
};
MyClass::MyClass(int x0, int y0, int z0)
{
  x=x0;
  y=y0;
  z=z0;
}
int main(){
  int n=10;
  MyClass* classes=new MyClass[n];
  //.....программа
  delete[] classes;
  return 0;
}
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 17:16  [ТС]     Ошибка работы деструктора #9
Благодарю.
Между прочем это очень интересно, мой первый вариант программы был именно таким, и препода не устроило как раз таки отсутствие деструктора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 17:17     Ошибка работы деструктора
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
03.03.2013, 17:17     Ошибка работы деструктора #10
можешь добавить деструктор, но он будет абсолютно пустым, ибо не нужен.
C++
1
2
3
MyClass::~MyClass()
{
}
Yandex
Объявления
03.03.2013, 17:17     Ошибка работы деструктора
Ответ Создать тему
Опции темы

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