![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Корректно ли будет освобождена память, если delete передать void*
Например
foostruct - это структура. Такая операция допустима в принципе или это чистой воды вредительство? Знаю, что при таком удалении не вызывается деструктор, это единственная проблема или есть еще подводные камни? Спасибо. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
а это компилируется?
если нужно работать с памятью не типизировано, через указатели на void, то лучше просто использовать malloc/realloc/free... |
|||
|
||||
Mayk |
|
||||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 3 Всего: 134 |
Не вызов деструкторов вполне достаточная причина для отказа от подобной конструкции.
К тому же g++ сыпет предупреждения что deleting 'void*' is undefined. Что тоже страшно. Это сообщение отредактировал(а) Mayk - 11.7.2008, 10:28 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
||||
|
|||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Ага, компилируется даже без ворнингов. Lazin, гм.. по поводу malloc/free я понимаю, проблема в том, что это не новая разработка, а уже написанная программа. Переписывать заново мне ее никто не даст, задача стоит в исправлении одного вредного AV. У меня делема то ли порча памяти происходит из-за удаления void* или память затирается в другом месте и нужно отлавливать момент порчи адреса. Добавлено через 4 минуты и 20 секунд
Я понимаю, в данном случае такую схему используют для удаления простых типов и простых структур, потому деструктора просто нет и это никак не может повлиять на правильность выполнения кода. Логически это неверно, я согласен, но чисто технически не критично.
Вот это уже интереснее. Выходит что такое удаление не регламентировано по стандарту? Т.е. последствия могут быть самыми любыми? -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 27 Всего: 154 |
я думаю что это UB, могу только предположить, что память будет освобождена, но деструктор вызван не будет...
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Я тоже вот встретил упоминание того что это undefined behavior http://lists.apple.com/archives/Xcode-user...n/msg00355.html. Хотелось бы узнать точнее действиетльно ли это так или же можно не замарачиватся этим вопросом и оставить код как есть. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 6 Всего: 162 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |