![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 09.04.2009
Сообщений: 4
|
![]()
Пишу код типа:
В h-файле: Код:
Код:
В прикладном файле-клиенте на стеке порождается ряд объектов типа B. При первом вызове деструктора ~A() операция delete выполняется нормально, а следующий вызов приводит к Access Violation, т.к. delete обращается к уже удаленной при первом вызове переменной element. Собственно вопрос: в чем причина ошибки? Ведь вызов конструктора базового класса происходит опросредованно через вызов конструктора производного класса B(), значит, по идее, и деструктор должен вызываться для соответствующего объекта. При попытке перенести new и delete для element в соответственно конструктор и деструктор производного класса, оставив объявление в базовом, имею аналогичную картину. Последний раз редактировалось MaTBeu; 09.04.2009 в 19:21. |
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]() Цитата:
![]() Цитата:
Код:
|
||
![]() |
![]() |
![]() |
#3 |
Регистрация: 09.04.2009
Сообщений: 4
|
![]() |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Разве не Ваши слова, что удаляется второй раз одно и то же? Код в студию как именно создаёте объект, как именно удаляете, а то мало ли что там у Вас и как происходит...
|
![]() |
![]() |
![]() |
#5 | |
Регистрация: 09.04.2009
Сообщений: 4
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#6 |
Новичок
Джуниор
Регистрация: 30.03.2009
Сообщений: 1
|
![]()
насколько я помню, если в базовом классе есть виртуальные функции то и диструктор у базового класса должен быть виртуальным...
Последний раз редактировалось Bogus Jr.; 10.04.2009 в 01:15. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 07.04.2009
Сообщений: 2
|
![]() |
![]() |
![]() |
![]() |
#8 | |
Пользователь
Регистрация: 18.03.2009
Сообщений: 89
|
![]() Цитата:
Код:
Scogan, по поводу основного вопроса - можешь привести более полный код происходящего? Наверняка там какая-нибудь путаница, которую на словах фиг поймешь. |
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,091
|
![]()
Может там конструктор копирования вызывается неявно. Явно конструктор не задан и потому будет поэлементное копирование и разные объекты будут указывать на один и тот же element. В общем код в студию
![]() |
![]() |
![]() |
![]() |
#10 |
Регистрация: 09.04.2009
Сообщений: 4
|
![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Освобождение памяти | AlexandrSid | Общие вопросы Delphi | 3 | 02.02.2009 13:45 |
Освобождение Памяти в Си | volotsky | Помощь студентам | 2 | 16.12.2008 22:36 |
До выделение памяти | MAKTE | Общие вопросы C/C++ | 4 | 20.05.2008 21:34 |
Выделение памяти | antoha.by | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.04.2008 20:04 |
выделение оперативной памяти | Alar | Общие вопросы Delphi | 0 | 29.10.2006 21:56 |