![]() |
|
Модераторы: bsa |
![]()
|
|
| MightyCat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
Например есть функция:
Вопрос, как освободить память под "а" ? Уже понял, что назвал тему не корректно и под временным объектом принято считать немного другое. Но так уж назвал Это сообщение отредактировал(а) MightyCat - 1.12.2009, 13:00 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
delete[]a;
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| MightyCat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
djamshud, издеваешься?
Если я это сделаю до return, то передам вобще не понятно что. А после нельзя, т.к. выполнение функции заканчивается на return. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
а ты что спрашивал? ответ абсолютно точен.
В общем дела обстоят так, либо освобождать память там, где этого делать не следует (в вызывающей части кода), либо возвращай std::vector (или boost::scoped_array). |
|||
|
||||
| Wisdom |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
Что значит "освободить память ПОД "а"" ?
Ты её уже выделил ПОД массив. |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 8 Всего: 146 |
|
|||
|
||||
| MightyCat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
azesmcar, это если шутить в стиле Вагановича. Wisdom, я вот таким удивляюсь. Если Вам нечего сказать, то лучше ничего и не говорить. Да, согласен, немного путано изложил вопрос, но уверен, что для того кто знает, тут все было понятно. azesmcar, т.е. в теле функции мы это сделать не сможем. Нарушается правило освобождать память там, где ее и выделяли. Значит, другого решения нет?
586, спасибо, но это и так понятно. Думал, есть способ сделать это в самой функции. В следующий раз буду более точно излагать суть вопроса. Чтобы не было казусов с ответами. Всем спасибо Это сообщение отредактировал(а) MightyCat - 1.12.2009, 13:45 |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
т.е. как? сперва удалить а потом вернуть? или вернуть а потом удалить? Еще есть вариант описанный 586 но это как раз и есть
вызывающий код не обязан подчищать за твоей функцией, но это так..эстетические правила, работать будет. Это сообщение отредактировал(а) azesmcar - 1.12.2009, 13:47 |
||||
|
|||||
| MightyCat |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
Я еще не так хорошо знаком с с++ как хотелось бы, поэтому и интересуюсь, может есть какая-то возможность возвратить значение и освободить память "одним махом". Понимая как тут обстоят дела, сразу уточню, возвратить значение, а потом освободить память. Ясно, никакого трюка нет. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
дело в том, что ты не возвращаешь значение, ты возвращаешь УКАЗАТЕЛЬ на данные. Если вернуть указатель на эти данные а потом удалить это ничего не изменит, все равно под возвращенным тобой указателем освобожденная область памяти и при попытке достать эти данные ты получишь скорее всего Access Violation. Это сообщение отредактировал(а) azesmcar - 1.12.2009, 13:50 |
|||
|
||||
| MightyCat |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
Блин, я извиняюсь, но мне это понятно. я мог вернуть не указатель. Как вариант:
Спрашивал же, как можно освободить память тут же? Уже обожженный придирчивостью здешних людей, скажу, ясный пень, ведь я мог:
Только хотел сделать это без someCh Вобщем, я уже все понял. Спасибо за внимание Это сообщение отредактировал(а) MightyCat - 1.12.2009, 13:58 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
| MightyCat |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 2.11.2008 Где: Донецк Репутация: нет Всего: нет |
Я спрашивал про память, и хотел о ней же получить ответ Уважаемый, если нечего сказать, можете промолчать, я не обижусь. Добавлено @ 14:13 Про массив также понятно. Повторяю еще раз, память выделена динамически (раз такая любовь к массивам, сделаем так):
Тут будет утечка памяти? Мы же нигде не освобождаем память выделенную под a. Ой, боюсь что сейчас будет Знаю что можно сделать так:
Просто думал есть более изящное решение, как то обернуть-завернуть... Это сообщение отредактировал(а) MightyCat - 1.12.2009, 14:15 |
||||
|
|||||
| unicuum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 16.3.2005 Где: Рашка Репутация: нет Всего: 8 |
Кстати, то что там пишет MightyCat я комментировать не буду, так как есть разница между копированием (копирующий конструктор) и передачи по указателю. Но можно же автоматически удалять объект, когда на него не остаётся вообще ни одной ссылки, то есть умный указатель. Раз уж затронута тема, можно рассмотреть различные пути реализации и применения, как вот здесь. -------------------- ![]() обычный день на винграде |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
![]()
|
| Правила форума "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. |