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

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

Войти
Регистрация
Восстановить пароль
 
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
#1

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

03.03.2013, 16:57. Просмотров 312. Ответов 9
Метки нет (Все метки)

Здравствуйте. Недавно начала программировать на 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) при первом же вызове деструктора. Рискну предположить, что моя ошибка в отсутствии конструктора копирования, но как именно ее исправить в данной ситуации - теряюсь в догадках. Заранее спасибо за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 16:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка работы деструктора (C++):

Особенности работы деструктора - C++
Есть вот такой код. Все работает.#include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; class complex{ private: ...

Ошибка деструктора - C++
Имеется шаблон класса- динамического массива. После создания функции push_back начал ругаться конструктор. Объясните пожалуйста в чем дело?...

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

Ошибка при вызове деструктора - C++
Всем привет ! Есть класс class building { private: string *location_street; unsigned int *number_of_building; public...

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

Ошибка при работе деструктора - C++
#include&lt;iostream&gt; #include&lt;time.h&gt; #include&lt;Windows.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
03.03.2013, 16:58 #2
деструктор тут не нужен
delete должен удалять не только всё то, что выделялось оператором new
но и ТОЛЬКО то, и ничего больше.
0
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];
аналогичная ошибка.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
03.03.2013, 17:06 #4
деструктор не удаляет объекты. Ты не знал что ли?

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

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

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

Не по теме:

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

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

А вот вызывать его ВООБЩЕ никогда не нужно.
Странно. Преподаватель советовал как раз явный вызов деструктора. Не суть.
Насчет амперсанда - если мы имеем память, выделенную под обьекты через new - как иначе нам получить адрес этой памяти?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 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;
}
0
sylvia
0 / 0 / 0
Регистрация: 03.03.2013
Сообщений: 5
03.03.2013, 17:16  [ТС] #9
Благодарю.
Между прочем это очень интересно, мой первый вариант программы был именно таким, и препода не устроило как раз таки отсутствие деструктора.
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
03.03.2013, 17:17 #10
можешь добавить деструктор, но он будет абсолютно пустым, ибо не нужен.
C++
1
2
3
MyClass::~MyClass()
{
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.03.2013, 17:17
Привет! Вот еще темы с ответами:

Ошибка при вызове деструктора - 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 //объявление...

Ошибка сегментации при срабатывании деструктора - C++
Всем привет. Помогите, пожалуйста, разобраться с деструкторами. Суть проблемы заключается вот в чем: есть класс MyClass1 и AnotherClass,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
03.03.2013, 17:17
Ответ Создать тему
Опции темы

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