Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чет остается после удаления объектов в векторе  (Прочитано 6170 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« : 30-01-2010 09:25 » 

Доброе время суток.
Создаю 3 объекта, помещаю в вектор, потом удаляю в цикле, вроде, что создаю, то и удаляю, а нет, что-то остается в пямяти, ругается на утечку памяти, не пойму, что не удалил, подскажите, вот пример.
Компилировал в VC6.

* prim1.rar (34.14 Кб - загружено 591 раз.)
« Последнее редактирование: 30-01-2010 10:21 от Sel » Записан
Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #1 : 30-01-2010 09:32 » 

Чет - это четное число или чего? Пиши по-русски! Родной язык не уважаешь, и смысла в сообщениях нет!
Записан

Слово не воробей. Всё не воробей, кроме воробья.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 30-01-2010 09:54 » 

SAndrus, попробуй такой код
Код:
while (m_pImgVec->begin() != m_pImgVec->end()) {
delete m_pImgVec->back();
m_pImgVec->pop_back();
}
delete m_pImgVec;
Да и через итераторы намного удобнее работать с вектором.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 30-01-2010 10:05 » 

Спасибо,

Set чет обозначает не четное, а чегото. Извините.

Finch так пробовал, все равно остается 16 байт, я даже не пойму как выделяется эта память, такое ощущение, что она выделяется при добавлении элемента в вектор. Тогда вообще непонятно как ее освободить.

При добавлении 2 объектов. как и одного не освобождается 8 байт
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 30-01-2010 10:11 » 

SAndrus, Я не смотрел код до конца. Убери пока работу с вектором. И посмотри сколько байт у тебя остается. Затем просто создай объект CImg и в деструкторе его освободи. Также посмотри на течь. Сдается мне, что вектор тут не причина. Кстати, каким имено инструментом обнаруживаеш течь?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-01-2010 18:17 » 

объявил указатель, выделил память для массива из 3х CImg, использовал, удалил, течей нет, все нормально.
Течь обнаруживаю дебужем в студии, пишет и адрес и сколько байтов, в отладке смотрел где инициализируются этот адрес именно при добавлении элемента в вектор, поэтому на него и думаю.
Записан
Sel
Злобный
Администратор

ru
Offline Offline

« Ответ #6 : 30-01-2010 18:49 » 

"Дебуж" - это что???

Блин, как так можно еще что-то программировать с такими словообразованиями?Не понял
Записан

Слово не воробей. Всё не воробей, кроме воробья.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 30-01-2010 20:24 » 

SAndrus, Иногда студия не верно дает данные об течи памяти. Так как окончательное освобождение идет после того, как будет опубликован отчет. Для достоверности нужно использовать внешние програмы. В коде у тебя вроде бы ничего противозаконного в работе с вектором нет. Хотя динамическое создание самого вектора, я лично в первый раз встречаю. Обычно его используют в статическом варианте создания.
« Последнее редактирование: 30-01-2010 20:26 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #8 : 30-01-2010 21:28 » 

Очеловечил немножко код, проблема ушла Улыбаюсь Смотри аттач

* prim1.rar (27.56 Кб - загружено 578 раз.)
Записан

SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 31-01-2010 07:01 » 

Set спасибо за критику, но если смотреть работать с VC6, то сведения о течи именно в закладке дебуж и пишут, мож ты с другой студией работаешь.
Алексей1153 и Finch сразу у меня не получилось определить вектор статически, так симпатичнее
Записан
SAndrus
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 31-01-2010 07:02 » 

Спасибо
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #11 : 31-01-2010 07:08 » 

SAndrus, пара советов, если ты не против Улыбаюсь

1) не делай никогда мембером класса void* m_pointer, чтобы потом приводить его к некоторому типу. Это: некрасиво, неудобно, опасно. Не исключено, что память текла и в релизе, и если бы только дело в памяти Улыбаюсь Если всё же охота сделать так, как ты сделал (или иного выхода нет) , примени pimpl (найдёшь описание, думаю Ага ) - объяви имя класса-оболочки в заголовке, а в файле реализации напиши прототип и реализацию класса.

2) переходи на 9-ю студию. Особенно, если ты на шестёрке недавно. Я сам долго в ней сидел - у неё много плюсом в плане интерфейса, особенно визарда, но в дебаге не всегда удобно, особенно с шаблонами и объектами STL. Проекты портируются нормально, только обращай внимание на warnings!
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines