Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Освобождение памяти указателей void* 
:(
    Опции темы
Alexeis
Дата 11.7.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Корректно ли будет освобождена память, если delete передать void*
Например
Код

void* foo = new foostruct;
delete foo;

foostruct - это структура. 
Такая операция допустима в принципе или это чистой воды вредительство?
Знаю, что при таком удалении не вызывается деструктор, это единственная проблема или есть еще подводные камни?

Спасибо.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 11.7.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



а это компилируется?
если нужно работать с памятью не типизировано, через указатели на void, то лучше просто использовать malloc/realloc/free...
PM MAIL Skype GTalk   Вверх
Mayk
Дата 11.7.2008, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 3
Всего: 134



Цитата(Alexeis @  11.7.2008,  14:09 Найти цитируемый пост)
Знаю, что при таком удалении не вызывается деструктор, это единственная проблема или есть еще подводные камни?

Не вызов деструкторов вполне достаточная причина для отказа от подобной конструкции.
Цитата(Lazin)
    
а это компилируется?

К тому же g++ сыпет предупреждения что deleting 'void*' is undefined. Что тоже страшно.



Это сообщение отредактировал(а) Mayk - 11.7.2008, 10:28


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 11.7.2008, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Цитата(Lazin @  11.7.2008,  09:12 Найти цитируемый пост)
а это компилируется?

  Ага, компилируется даже без ворнингов. 

Lazin, гм.. по поводу malloc/free я понимаю, проблема в том, что это не новая разработка, а уже написанная программа. Переписывать заново мне ее никто не даст, задача стоит в исправлении одного вредного AV. У меня делема то ли порча памяти происходит из-за удаления void* или память затирается в другом месте и нужно отлавливать момент порчи адреса.

Добавлено через 4 минуты и 20 секунд
Цитата(Mayk @  11.7.2008,  09:28 Найти цитируемый пост)
Не вызов деструкторов вполне достаточная причина для отказа от подобной конструкции.

  Я понимаю, в данном случае такую схему используют для удаления простых типов и простых структур, потому деструктора просто нет и это никак не может повлиять на правильность выполнения кода. Логически это неверно, я согласен, но чисто технически не критично.

Цитата(Mayk @  11.7.2008,  09:28 Найти цитируемый пост)
К тому же g++ сыпет предупреждения что deleting 'void*' is undefined

Вот это уже интереснее. Выходит что такое удаление не регламентировано по стандарту? Т.е. последствия могут быть самыми любыми?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 11.7.2008, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



я думаю что это UB, могу только предположить, что память будет освобождена, но деструктор вызван не будет...
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 11.7.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 4
Всего: 459



Цитата(Lazin @  11.7.2008,  10:19 Найти цитируемый пост)
я думаю что это UB, могу только предположить, что память будет освобождена, но деструктор вызван не будет... 

  Я тоже вот встретил упоминание того что это undefined behavior http://lists.apple.com/archives/Xcode-user...n/msg00355.html. Хотелось бы узнать точнее действиетльно ли это так или же можно не замарачиватся  этим вопросом и оставить код как есть.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
JackYF
Дата 11.7.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 6
Всего: 162



Цитата(Lazin @  11.7.2008,  10:19 Найти цитируемый пост)
я думаю что это UB, могу только предположить, что память будет освобождена, но деструктор вызван не будет... 

Дваждую. Я бы так не делал.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1304 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.