Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Out of system resources, Утечка памяти? 
:(
    Опции темы
dimavit
Дата 17.8.2012, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



В цикле постоянно создаются и удаляются объекты, входящие в динамический массив. Удаление производится при помощи такой процедуры:
 
Код

procedure delElem( var A:TRectArray; Index:integer );   
var Last : integer;   
begin  
   Last:= high( A );   
   if Index <  Last then move( A[Index+1], A[ Index ],   
       (Last-Index) * sizeof( A[Index] )  );   
   setLength( A, Last );   
end; 


Не может ли возникнуть ситуация, при которой в данном случае объект не полностью освобождает память? Дело в том, что при определенном количестве шагов цикла возникает ошибка "Out of system resources". При этом в массиве имеется всего от 5 до 20 объектов. А в ходе всей работы их было создано и удалено тысяч 15. Объекты представляют собой созданный класс
PM MAIL   Вверх
Illusion Dolphin
Дата 17.8.2012, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



Цитата

Не может ли возникнуть ситуация, при которой в данном случае объект не полностью освобождает память?

Может. А где освобождение памяти под объект? Вы уменьшаете размер массива на 1, но при этом объект остаётся в памяти.


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
dimavit
Дата 17.8.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 17.8.2012,  10:38)
Цитата

Не может ли возникнуть ситуация, при которой в данном случае объект не полностью освобождает память?

Может. А где освобождение памяти под объект? 

 Я предполагал, что объект должен освобождать память будучи удаленным из массива. Но подозрение было, что возможно и нет. Значит оно подтверждается?
PM MAIL   Вверх
Frees
Дата 17.8.2012, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 16
Всего: 54



используй TList а не массив, там обовсем подумали уже.

Добавлено через 4 минуты и 5 секунд
Или если версия делфи свежая то можно generics использовать

Добавлено через 7 минут и 47 секунд
Проверить наличие утечки памяти можно с  помощью
Код

  ReportMemoryLeaksOnShutdown := True



--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
dimavit
Дата 17.8.2012, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



Цитата(Frees @ 17.8.2012,  11:11)
используй TList а не массив, там обовсем подумали уже.

Добавлено @ 11:15
Или если версия делфи свежая то можно generics использовать

Добавлено @ 11:19
Проверить наличие утечки памяти можно с  помощью
Код

  ReportMemoryLeaksOnShutdown := True

Спасибо!
PM MAIL   Вверх
bems
Дата 17.8.2012, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



Цитата(Frees @  17.8.2012,  11:11 Найти цитируемый пост)
используй TList а не массив, там обовсем подумали уже
там есть решение проблемы постоянного перевыделения памяти, а удаления объекта при удалении элемента там нет

список владеющий объектами это TObjectList или TObjectList<T>



--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1226 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.