Pages: (3) 1 2 [3] ( Show unread post )

> туплю в c++
 Set Member is Offline
 Posted: 11-06-2011, 02:23 (post 31, #1022059)

Visionary

Group: Members
Posts: 5181
Warn:0%-----
Пройдись циклом по обеим спискам и delete все объекты. Только потом clear(). Возможно где ещё в коде надо объекты удалять... не разобрать. А вообще выкинуть нафиг этот c++ :D:
PM
Top Bottom
 Lexus Member is Offline
 Posted: 11-06-2011, 11:46 (post 32, #1022075)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
QUOTE (Set @ 11-06-2011, 01:23)
Пройдись циклом по обеим спискам и delete все объекты. Только потом clear(). Возможно где ещё в коде надо объекты удалять... не разобрать. А вообще выкинуть нафиг этот c++ :D:
да я бы с радостью. Но надо в нём)))

Симуляция длится примерно 2000-3000 сек, За это время эта команда вызывается уйму раз))) Дабы структуру дерева оптимировать.
память жрётся только при вызове этой команды :(
Спасибо за совет, буду пробывать!!!
PM Email Poster Users Website
Top Bottom
 Lord KiRon Member is Offline
 Posted: 11-06-2011, 14:50 (post 33, #1022082)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
QUOTE (Lexus @ 10-06-2011, 23:03)
QUOTE (boriskin @ 10-06-2011, 22:26)
Иметь на каждый new соответствующий delete, который ьудет подчишать выделенную память как только она становится не нужна.
т.е. при вызове
_WorkList.clear();
_TreeList.clear();

из List не удаляют объекты с памяти, а просто удаляются со списка?

Как бы так сказать ,я не совсем представляю, где delete вставлять)))))
Смотри, clear очищает только список , но если ты засовывал в список элокированые поинтеры а потом вызвал clear то они "теряются".
Все что тебе нужно это для каждого списка перед вызовом clear пройтись по всему списку , что то типа:
CODE
for (it = _WorkList.begin(); it != _WorkList.end(); it++)
{

}
и удалить каждый п[оинтер в каждом элементе.
PM
Top Bottom
 Lexus Member is Offline
 Posted: 11-06-2011, 14:55 (post 34, #1022083)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
Спасибо!!! Вот так из математиков становятся програмистами))))))) хоть и хреновыми)))))
PM Email Poster Users Website
Top Bottom
 FiL Member is Offline
 Posted: 11-06-2011, 17:56 (post 35, #1022092)

Сварливый Мозг Клуба
Group: Roots
Group: Roots
Posts: 22884
вообще судя по мануалу clear вызывает деструктор у каждого элемента перед его удалением. Так что по идее память должна освобождаться.
LExus, ты проверь, у тебя деструктор память освобождает или где.

P.S. я далеко не спец в сях, но что-то меня сильно смущает эффективность данного кода. Неужто перестроить списки нельзя как-то без удаления и создания с нуля? Уж очень оно странно.
PM Email Poster ICQ AOL MSN
Top Bottom
 Lexus Member is Offline
 Posted: 11-06-2011, 22:48 (post 36, #1022098)

Коллекционер
Group: Global Moders
Group: Global Moders
Posts: 10401
У меня есть определённые обекты (Cell). в них значения дифф.уравнения. Созфаётся huffman tree где Nodes содержат пропизводные или другие оператроы от уравнений (rate). хуффмантри используется для семплинга элемнтов. Учитывая его структуру доступ к элементам с наибольшей rate намного короче, чем если бы я это делал в бинарном дереве или просто в массиве. Учитывая что уравнение меняется во время симуляции, нужно перестраивать дерево, дабы оптимайзить скорость доступа.
До этого было у меня без
_WorkList.clear();
_TreeList.clear();
но у меня было макс. 400 nodes, сейчас проблема 2D со 100 Nodes, отсюда 100*100 в дереве. И оно уже вылетает от обжорства.

A как проверить, высвобождает или нет?
PM Email Poster Users Website
Top Bottom
 Set Member is Offline
 Posted: 12-06-2011, 01:38 (post 37, #1022106)

Visionary

Group: Members
Posts: 5181
Warn:0%-----
http://stackoverflow.com/questions/307082/cleaning-up-an-stl-list-vector-of-pointers

Как красиво можно чистить списки. :)
PM
Top Bottom
 Lord KiRon Member is Offline
 Posted: 12-06-2011, 08:36 (post 38, #1022112)

Part time flamer

Group: Read Only
Posts: 7784
Warn:0%-----
QUOTE (FiL @ 11-06-2011, 16:56)
вообще судя по мануалу clear вызывает деструктор у каждого элемента перед его удалением. Так что по идее память должна освобождаться.
Если в список добавлен обьект - да, а если поинтер на обьект то нет.
PM
Top Bottom
 boriskin Member is Offline
 Posted: 22-06-2011, 16:32 (post 39, #1022944)

Superman

Group: Members
Posts: 1175
Warn:0%-----
QUOTE (FiL @ 11-06-2011, 09:56)
вообще судя по мануалу clear вызывает деструктор у каждого элемента перед его удалением. Так что по идее память должна освобождаться.
У raw указателя нет деструктора, очищающего указываемую память. ДЛя этого надо auto::ptr или другие варианты обертки указателя с reference counts пользовать.

This post has been edited by boriskin on 22-06-2011, 16:36
PM Email Poster ICQ
Top Bottom
 boriskin Member is Offline
 Posted: 22-06-2011, 16:35 (post 40, #1022945)

Superman

Group: Members
Posts: 1175
Warn:0%-----
QUOTE (Lexus @ 11-06-2011, 14:48)
A как проверить, высвобождает или нет?
Если под Линуксом/Юниксом - гонять memory leak tools, ченить типа valgrind (или как оно там), если под виндой - то в дебаге в output будет вываливать всю инфу о утечках, если повезет - то даже с указанием на место в коде.

This post has been edited by boriskin on 22-06-2011, 16:36
PM Email Poster ICQ
Top Bottom
Topic Options Pages: (3) 1 2 [3]