|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.02.2011, 11:13 | #1 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
Проблема с освобождением памяти
Добрый день. Вот часть моей программа.
Код:
Пробовал просто удалить ссылку на эту запись InfromationGraphElement.Information Node := nil;, но память все равно не очищается. Что делать? Последний раз редактировалось Vyachek2010; 07.02.2011 в 11:34. |
07.02.2011, 13:38 | #2 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,527
|
Цитата:
в 99% случаев знание текста ошибка на языке оригинала позволить получить ответ (или совет) в течении 5 минут. Или быстрее если воспользоваться поиском с текстом ошибки.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.02.2011 в 13:42. |
|
07.02.2011, 13:55 | #3 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
Когда обращаюсь к записям InformationNode возникает критическая ошибка.
Вот текст. for I := 0 to TempList1.Count - 1 do Begin InformationNode := TempList1.Items[I]; Str := InformationNode.ListElement[0]; End; Оно так и должно быть по идее потому что удаляется InformationNode.ListElement.Free;, но без этой строчки не хочет удаляться запись InfromationGraphElement т.е. память не очищается. Мне нельзя убивать запись InformationNode поскольку она используется в списке TempList1 и используется дальше в программе, но если я ее не буду убивать т.е. не буду выполнять вот это: InformationNode := InfromationGraphElement.Information Node; InformationNode.ListElement.Free; InformationNode.ListPins.Free; Dispose(InformationNode); то память при выполнении Dispose(InfromationGraphElement); не освобождается. а мне надо освободить при этом запись InformationNode не должна пострадать. Последний раз редактировалось Vyachek2010; 07.02.2011 в 13:58. |
07.02.2011, 14:02 | #4 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
вместо вот этого
for I := 0 to TempList.Count - 1 do Begin InfromationGraphElement := TempList.Items[I]; InformationNode := InfromationGraphElement.Information Node; InformationNode.ListElement.Free; InformationNode.ListPins.Free; Dispose(InformationNode); Dispose(InfromationGraphElement); End; я пытался делать вот так for I := 0 to TempList.Count - 1 do Begin InfromationGraphElement := TempList.Items[I]; InfromationGraphElement.Information Node := nil; Dispose(InfromationGraphElement); End; но память при этом не очищается т.е. Dispose(InfromationGraphElement); выполняется но память как была занята так и остается. |
07.02.2011, 14:09 | #5 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Не?
Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
07.02.2011, 14:15 | #6 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
Без вот этого
InformationNode := InfromationGraphElement.Information Node; InformationNode.ListElement.Free; InformationNode.ListPins.Free; Dispose(InformationNode); память не освобождается вообще |
07.02.2011, 14:20 | #7 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Какая память? И как ты это определяешь?
Я так понимаю, что ты хочешь очистить список TempList, но не трогать список TempList1. Вот я тебе и привёл код. Если ты используешь Код:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
07.02.2011, 14:40 | #8 | |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
Цитата:
когда я сделаю TempList.Free я удалю только ячейки TempList но не удалю записи InfromationGraphElement которые я помещал в этот список. Мне нужно удалить все записи InfromationGraphElement и почистить список TempList. При удалении записи InfromationGraphElement я должен удалить запись InformationNode которую я присваиваю в запись InfromationGraphElement. Если я не буду удалять запись InformationNode то память не будет освобождаться. Основной объем памяти занимают записи InfromationGraphElement и в первую очередь надо удалить их из памяти а потом чистить TempList. При удалении InfromationGraphElement я удаляю и InformationNode а мне этого не надо поскольку InformationNode используется дальше в программе и списке TempList1. В том коде что ты мне привел запись InfromationGraphElement не удаляется физически из памяти, из-за того что в этой записи есть указатель на InformationNode и пока InformationNode не будет удален запись InfromationGraphElement не будет выгружена из памяти (физически). А мне нельзя удалять запись InformationNode, мне надо как-то разорвать связь между InfromationGraphElement и InformationNode, а потом уже удалять саму запись InfromationGraphElement. Последний раз редактировалось Vyachek2010; 07.02.2011 в 14:47. |
|
07.02.2011, 14:42 | #9 |
Пользователь
Регистрация: 10.12.2010
Сообщений: 12
|
как удаляется память смотрю по диспетчеру задач в процессах
|
07.02.2011, 15:13 | #10 | |||||
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Кто-то здесь совсем не понимает, как выделяется память в программах. Читать.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|||||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Кольцевая очередь на массиве в статической памяти с элементами в динамической памяти | ]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 |