![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Прочитал темы посвещенные данному оператору, но то что интересует не нашел.
В случае, если я просто вызываю оператор delete [] mass; то соотвественно , все что было в этой памяти уничтожается, но что происходит с памятью? У меня есть подозрение, что освобожденная память не возвращается обратно в систему. А дальше по циклу, я снова выделяю память, по этому же указателю, и так пока программа не съедает все виртуальную память на машине, и благополучно умирает. Сегодня наткнулся на запись в книге, что, для того чтобы освобожденная память была возвращена в систему, оператор delete помещается в деструктор. Так ли это? или в любом случае , освобожденная память возвращается в систему? |
|||
|
||||
sergejzr |
|
|||
![]() Un salsero ![]() Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
"Возвращается" конечно. Освобождённые блоки помечаются свободными и будут использованы при первом удобном случае.
А с чем связано подозрение? |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Память выделенную с new T удаяешь при помощи delete pTr, а new T[] удаляешь delete [] pTr. Если попытаешься стереть то, что выделил с new [] простым delete, то получишь UB.
И что значит не возвращаться в память? При вызове delete вызывается деструктор, а потом free, который освобождает память. |
|||
|
||||
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Подозрение связано с тем, что очень хорошо в диспетчере задач видно , как программа выедает память. При отладке в дебагере видно, что данные уничтожаются. И тем не менее, память исчезает. Поэтому и возникла мысль, что освобожденная память так и остается освобожденной областью памяти, в которой ничего нет, а на следующей итерации цикла, где снова вызывается оператор new память опять выделяется, и данные записываются в неё, а не в ту ранее освобожденную область .
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
имхо где то есть участок кода где есть выделение памяти , но нет освобождения
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Romikgy,
ладно... придется дальше искать. Значит, при операторе delete память "возвращается в общий кусок" а не остается висеть в пространстве пустой областью просто занимающей место. Так? |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
-------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Gelos, покажи код, а то так ты можешь еще очень долго выяснять -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Найди какой-нибудь инструмент, отлавливающий memory-leak'и. Или свой напиши --- перегружаешь операторы new и delete, при вызове new записываешь куда-либо что было выделение. При вызове delete'ов затираешь что было выделение. В конце работы выводишь какие участки памяти не были освобождены. -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Rockie,
Код проекта уже весьма большой, поэтому приводить не имеет смысла. Mayk, Спасибо, возьму на заметку. хорошая идея.. |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
а, блин
![]() Семен Семеныч.. ![]() Добавлено через 4 минуты и 4 секунды Gelos, ты выделяешь память в цикле, но навряд ли там же освобождаешь. В итоге память выделяется, не удаляется и снова выделяется. Поэтому программа жрет память, что и должна делать ![]() -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Rockie,
ну щаз ) как же. в обоих циклах, как в главном так и вложенном память выделяется и там же уничтожается. ![]() |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Gelos, чего ты жадничаешь? покажи функцию с этими циклами)) -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Gelos |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 29.4.2007 Репутация: нет Всего: нет |
Rockie,
кхе.... Да дело не в жадности. Просто весь проект взаимосвязан. Я не могу от туда взять кусок, и и показать. Мол тут непонятно. А выкладывать весь код, я редактировать устану. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |