![]() |
|
Модераторы: bsa |
![]()
|
|
| sergioK |
|
||||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
вот классы
вот майн
что Я делаю не так при очистке памяти ?, на Мanaged code не писал с 99года, в дебаге в момент стирания памяти создаеться доп сред и появдаеться файл с ассемблерным кодом , |
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 8 Всего: 146 |
Объект StandardGear, который создан в main() в строке 1, удаляется дважды: первый раз - в main() (строка 7), второй - в классе DecoratorGear (строка 44).
Это сообщение отредактировал(а) 586 - 2.1.2011, 10:07 |
|||
|
||||
| sergioK |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
т,e т,е, количество deletes должно быть равно количеству new ??? Это сообщение отредактировал(а) sergioK - 2.1.2011, 11:23 |
|||
|
||||
| Sosed |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.8.2009 Репутация: 1 Всего: 1 |
если после delete указатели не зануляются
|
|||
|
||||
| sergioK |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
а если зануляються то что ? выскочит exception ? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
после delete нужно указателю присвоить NULL
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Sosed |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.8.2009 Репутация: 1 Всего: 1 |
Поглядывая на стандарт, и указатель на NULL, ничего не произойдет) Обычно рекомендуют:
Это сообщение отредактировал(а) Sosed - 2.1.2011, 15:17 |
||||||
|
|||||||
| sergioK |
|
||||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
т,е ,
1) для чего 2) NULL или 0 ? 3) могу Я чистить память free чоть это не это не С++ (so what?) ведь delete все равно вызовет free , в тех случаях когда мне не нужно вызывать дестрактор ? |
||||
|
|||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Для указателя NULL, для Windows дескриптора 0. Физически это одно и тоже, но логически правильно указателю присваивать NULL.
Каждому new должен соответствовать delete, каждому new[] delete[], malloc - free . Если делать не так, то произойдет неизвестно что. Зачастую new выделяет памяти больше чем нужно и возвращает не указатель на начало блока, а на смещение внутри блока, тогда как free захочет начало блока. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| sergioK |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
||||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Да, но я бы не стал так делать. Присваивать стоит только в том случае, когда двойное удаление ожидается, а не присваивать всегда, чтобы избежать ошибки. Это все равно, что ловить все исключения и ничего не делать. Лучше уж пусть программа даст сбой, чем работает черт знает как. За двойным удалением скорее всего скрывается какая нибудь логическая ошибка и не надо ее маскировать нулевым указателем. Добавлено через 31 секунду Всех с новым годом кстати Первое сообщение в 2011-ом Добавлено через 4 минуты и 29 секунд sergioK Вообще возьми за правило очищать память на том уровне, на котором было выделение. Код будет логичнее и чище и подобных проблем будет меньше. |
|||
|
||||
| sergioK |
|
|||
|
Бывалый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 207 Регистрация: 15.2.2008 Репутация: нет Всего: нет |
разобрался всем спасибо, Это сообщение отредактировал(а) sergioK - 3.1.2011, 01:10 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |