46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
||||||
1 | ||||||
Классы - ошибка в деструкторе24.03.2013, 16:46. Показов 892. Ответов 12
Метки нет Все метки)
(
У меня сейчас такое "задание": опередить класс длинного целого числа (длинная арифметика), для сохранения которого необходимо использовать однонаправленный связной список. Конструктор создаёт всего-лишь первый элемент списка "Head" со значениями data = NULL, next = NULL. При чтении числа значения заносятся в конец списка.
В итоге данный деструктор выдаёт ошибку при удалении двух чисел в конце работы программы:
0
|
|
24.03.2013, 16:46 | |
Ответы с готовыми решениями:
12
Ошибка в деструкторе Ошибка в деструкторе Ошибка в деструкторе Ошибка при работе delete в деструкторе |
...
1859 / 1292 / 949
Регистрация: 12.02.2013
Сообщений: 2,121
|
|
24.03.2013, 19:21 | 2 |
Hunter13ua, код в принципе верен (правда можно было бы и 1-ой вспомогательной переменной воспользоваться, но это мелочи). Покажите весь класс.
0
|
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
||||||||||||||||
24.03.2013, 19:29 [ТС] | 3 | |||||||||||||||
LongNumbers.cpp
LongNumbers.h
0
|
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
|
24.03.2013, 19:46 [ТС] | 5 |
Kuzia domovenok, а объяснить почему можно? Я же не в курсе дела
![]()
0
|
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
|
24.03.2013, 19:55 [ТС] | 7 |
Kuzia domovenok, понял. А если вбить весь код из LongNumbers.cpp ниже в заголовочный файл - будет существенная разница ?
0
|
Каратель
![]() |
|
24.03.2013, 19:55 | 8 |
A и B ссылаются на одну и туже память, и на момент вызова деструктора А, объект В уже освободит память, а деструктор А освободит повторно - что и приводит к ошибке
0
|
24.03.2013, 19:59 | 9 |
Говоря простым языком,
#include команда препроцессора, которая говорит, что перед компиляцией срр файла в это место будет скопипащен текст из другого файла. Обычно это требуется для добавления заголовочных (.h) файлов в программу. Но это не значит, что всю программу следует инклюдить в один файл, а затем компилировать. Раздельная компиляция, как я её понимаю, это такая штука, что после того, как cpp файл прошёл препроцессор, он может компилироваться вне зависимости от наличия или отсутствия других срр файлов. Прочие срр могли скомпилироваться с ошибками или вообще их не хватает - не важно. компилятор обрабатывает срр файлы по-одному и строит из них куски кода. Затем эти куски кода связываются linkerом. И только при этом процессе уже складываются в единый экзе файл. Поэтому не надо делать это раньше времени.
1
|
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
|
24.03.2013, 20:07 [ТС] | 10 |
Jupiter, так я ведь переопределил оператор присваивания. Он удаляет старую память, создаёт новую и туда уже копирует значения из второго объекта. Разве ошибся ?
Добавлено через 3 минуты Kuzia domovenok, понял, благодарю за разъяснение ![]()
0
|
Каратель
![]() |
|
24.03.2013, 20:29 | 11 |
вы определили свой оператор равно.
для переопределения параметр должен передаваться: по значению, по ссылке, по ссылке на константу(+ volatile опционально к последним двум вариантам)
0
|
46 / 46 / 18
Регистрация: 25.10.2011
Сообщений: 183
|
||||||
24.03.2013, 23:27 [ТС] | 12 | |||||
Окей, тогда будьте добры, помогите с операцией присваивания
![]() Классы только начал изучать, соответственно и операции. Попытался переписать нечто:
0
|
Каратель
![]() |
||||||
25.03.2013, 00:00 | 13 | |||||
0
|
25.03.2013, 00:00 | |
25.03.2013, 00:00 | |
Помогаю со студенческими работами здесь
13
Возникает ошибка при удалении динамического массива символов в деструкторе класса
Ошибка в деструкторе Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |