| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Освобождение памяти указателей void* |
| Автор: Alexeis 11.7.2008, 10:09 | ||
| Корректно ли будет освобождена память, если delete передать void* Например
foostruct - это структура. Такая операция допустима в принципе или это чистой воды вредительство? Знаю, что при таком удалении не вызывается деструктор, это единственная проблема или есть еще подводные камни? Спасибо. |
| Автор: Lazin 11.7.2008, 10:12 |
| а это компилируется? если нужно работать с памятью не типизировано, через указатели на void, то лучше просто использовать malloc/realloc/free... |
| Автор: Alexeis 11.7.2008, 10:33 | ||||
Ага, компилируется даже без ворнингов. Lazin, гм.. по поводу malloc/free я понимаю, проблема в том, что это не новая разработка, а уже написанная программа. Переписывать заново мне ее никто не даст, задача стоит в исправлении одного вредного AV. У меня делема то ли порча памяти происходит из-за удаления void* или память затирается в другом месте и нужно отлавливать момент порчи адреса. Добавлено через 4 минуты и 20 секунд
Я понимаю, в данном случае такую схему используют для удаления простых типов и простых структур, потому деструктора просто нет и это никак не может повлиять на правильность выполнения кода. Логически это неверно, я согласен, но чисто технически не критично.
Вот это уже интереснее. Выходит что такое удаление не регламентировано по стандарту? Т.е. последствия могут быть самыми любыми? |
| Автор: Lazin 11.7.2008, 11:19 |
| я думаю что это UB, могу только предположить, что память будет освобождена, но деструктор вызван не будет... |
| Автор: Alexeis 11.7.2008, 11:33 | ||
Я тоже вот встретил упоминание того что это undefined behavior http://lists.apple.com/archives/Xcode-users/2007/Jan/msg00355.html. Хотелось бы узнать точнее действиетльно ли это так или же можно не замарачиватся этим вопросом и оставить код как есть. |
| Автор: JackYF 11.7.2008, 15:11 | ||
Дваждую. Я бы так не делал. |