Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2011, 15:29   #11
Vyachek2010
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
И что, по-твоему, в этом сообщении делать цикл? Именно это.



У тебя первый абзац противоречит второму. Либо ты удаляешь элементы TempList1 (aka InformationNode), либо нет. Ты уж как-то определись что тебе надо.



Та ты што? Прям физически?



Это бред. Рекомендую к изучению мат-часть.



Поскольку никакой связи между ними (на уровне выделения памяти, как ты подумал) не существует вовсе, то и разрывать попросту нечего. Поэтому достаточно только Dispose. Как я и указал здесь.



Кто-то здесь совсем не понимает, как выделяется память в программах. Читать.
Я могу скинуть тебе проект и ты посмотришь. если делать

procedure TForm1.btn7Click(Sender: TObject);
Var I: Integer;
InfromationGraphElement: PInfromationGraphElement;
begin
for I := 0 to TempList.Count - 1 do
Begin
InfromationGraphElement := TempList.Items[I];

Dispose(InfromationGraphElement);
End;

TempList.Free;
end;

то очищается только список TempList (т.е. удаляются адреса в этом списке) а сами объекты InfromationGraphElement не удаляются.
Dispose(InfromationGraphElement); не удаляется из памяти поскольку есть ссылка на InformationNod. если я удалю InformationNod, то после выполнения Dispose(InfromationGraphElement); память освободиться. Попробуй сам это сделать. текст всех структур приведен выше. Память не освобождается. Я не дурак и не впервый раз пишу программы, но здесь реально проблема. Давай я тебе вышлю проект и ты посмотришь.
Vyachek2010 вне форума Ответить с цитированием
Старый 07.02.2011, 15:33   #12
Vyachek2010
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

procedure TForm1.btn7Click(Sender: TObject);
Var I, J : Integer;
InfromationGraphElement, TempInfromationGraphElement : PInfromationGraphElement;
InformationNode : PInformationNode;
InformArc : PInformArc;
InformationPrevGraphElement : PInformationPrevGraphElement;
Str :string;
begin
for I := 0 to TempList.Count - 1 do
Begin
InfromationGraphElement := TempList.Items[I];

//-----Если закомментарить то InfromationGraphElement не удаляется из памяти-------
InformationNode := InfromationGraphElement.Information Node;
InformationNode.ListElement.Free;
InformationNode.ListPins.Free;
Dispose(InformationNode);
//---------------------------------------------------------

Dispose(InfromationGraphElement);
End;
TempList.Free;
end;


Если создавать элементы InfromationGraphElement и после обработки их удалять, чот я и хочу, то я вижу только то, что у меня память растет и потом вылетает ошибка Out of Memory!!!! Видно только то что удаляются ячейкиTempList которые занимают по 4 байта каждая и все.

Последний раз редактировалось Vyachek2010; 07.02.2011 в 15:38.
Vyachek2010 вне форума Ответить с цитированием
Старый 07.02.2011, 15:55   #13
Vyachek2010
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

Сделал как ты говорил но память освободилась только после того как я свернул приложение. опять же смотрел по диспетчеру задач. В чем здесь дело?

Последний раз редактировалось Vyachek2010; 07.02.2011 в 16:04.
Vyachek2010 вне форума Ответить с цитированием
Старый 07.02.2011, 16:29   #14
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

В том, что диспетчер задач показывает не то, что вы ожидаете.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 07.02.2011, 17:26   #15
Vyachek2010
Пользователь
 
Регистрация: 10.12.2010
Сообщений: 12
По умолчанию

переделал с record на class и все стало нормально

PInfromationGraphElement = ^TInfromationGraphElement;
TInfromationGraphElement = record
IndexID: Integer;
TypeConstruction: Integer;
InformationNode: PInformationNode;
End;

TInfromationGraphElement = class
IndexID: Integer;
TypeConstruction: Integer;
InformationNode: PInformationNode;
End;
Vyachek2010 вне форума Ответить с цитированием
Старый 08.02.2011, 17:05   #16
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
не удаляется из памяти поскольку есть ссылка на InformationNod.
вы не в Java или .NET где такая система есть.
тут программа делает то что вы написали.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти ]tach[ Общие вопросы C/C++ 1 19.01.2011 13:16
Проблема с утечкой памяти ExPeL Win Api 4 21.10.2010 22:13
Проблема с виделением памяти! FreTFuL Общие вопросы C/C++ 1 07.05.2010 20:23
самописный assert: проблема с утечкой памяти) sashonk Общие вопросы C/C++ 2 26.04.2010 15:58
Проблема выделения динамической памяти в С++ oxygen90 Помощь студентам 3 14.09.2009 21:47