| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Опять про освобождение памяти |
| Автор: greykardinal 13.2.2010, 11:56 | ||||||
| Тема поднималась уже не раз, но ответа я для себя не нашел. В программме есть куча глобальных переменных:
В обработчике на главной форме я выделяю динамически память, в другом обработчике - освобождаю
После вызова delete память не освобождается (смотрю по Task'у), освобождается после вызова деструктора главной формы. Всегда считал, что вызов delete уничтожает динамические объекты, а тут не получается Подскажите , как мне освобождать память не закрывая главную форму ЗЫ. И подскажите, может я неправильно представляю механизм работы new-delete. |
| Автор: Artemon 13.2.2010, 12:28 |
| чтобы удалить динамисеский массив, нужно писать так: delete [] ArrayName; |
| Автор: zim22 13.2.2010, 12:35 | ||
почитай Мейерса. "More effective C++". Правило 8 |
| Автор: Dem_max 13.2.2010, 15:16 |
| delete s этим ты удалил только что выделил тут s = new char *[Len]; А вот тут ты выделил память s[i]= new char[120]; но не удалил ее. |
| Автор: greykardinal 13.2.2010, 18:08 | ||||||
Для простоты оставил только массив s[][]. Выделил память
Написал вместо
Толку никакого. Как забрала прога метров 80, так и висят они((( Кто-нить может подсказать, как освободить память. |
| Автор: zim22 13.2.2010, 18:11 | ||
|
| Автор: zim22 13.2.2010, 18:54 |
s - это массив указателей. когда ты его удаляешь - удаляются указатели на объекты. но не сами объекты. перед удалением s нужно удалить все элементы в нём. для каждого из них вызывая delete / delete[] |
| Автор: greykardinal 13.2.2010, 19:09 | ||||
Нечто вроде
Так? |
| Автор: zim22 13.2.2010, 19:30 |
| Автор: greykardinal 13.2.2010, 19:59 |
| Попробовал. При i=0 ошибка:"Access violation at adress ... in module Project1.exe". Похоже я пытаюсь обратиться к объекту, которого не существует. Я пока ничего не понимаю. к сожалению Все, разобрался. Была локальная копия поэтому шла ругань Всем большое спасибо за помощь |
| Автор: Dem_max 13.2.2010, 20:49 |
| запомни на каждый new должен быть delete |