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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> function GetImage : TBitmap; коррекна ли работа с памятью? 
V
    Опции темы
HackMan
Дата 14.2.2007, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

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



Код

function GetImage : TBitmap;
begin
  Result := TBitmap.Create;
  // чё-то рисуем
end;


Код

  // чё-то делаем
  try
    Bm := TBitmap.Create;
    Bm.Assign(GetImage);
    // чё-то делаем
  finally
    Bm.Free;
  end;


Корректно ли такая функция работает с памятью? По завершению программы позаботиться ли Delphi об освободжения памяти GetImage? Объясните ход работы...


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
Bose
Дата 14.2.2007, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

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



В коде создаётся объект TBitmap(Bm), 
Код

  // чё-то делаем
  try
    Bm := TBitmap.Create;
    Bm.Assign(GetImage);
    // чё-то делаем
  finally
    Bm.Free;
  end;

В GetImage создаётся ещё один объект TBitmap, 
после этого свойства объекта из GetImage присваиваются свойствам объекта Bm, 
после чего ссылка на объект созданный в GetImage теряется, 
а объект Bm освобождается(Bm.Free).

Утечка памяти - один объект TBitmap.


Чтобы избежать утечки, достаточно изменить код вызова GetImage на следующий:
Код

  // чё-то делаем
  try
   //    Bm := TBitmap.Create; // не создаём, объект будет создан в GetImage
    Bm:=GetImage; //присваеваем пустой(пока) переменной объект созданный в GetImage
    // чё-то делаем
  finally
    Bm.Free; 
  end;

PM MAIL WWW Skype   Вверх
HackMan
Дата 14.2.2007, 04:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Юзверь-программист
**


Профиль
Группа: Участник
Сообщений: 391
Регистрация: 18.6.2005
Где: .ua

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



спасибо! так и думал smile


--------------------

Завтра - это самый загруженный день недели smile

user posted image

user posted image
PM MAIL ICQ   Вверх
MetalFan
Дата 14.2.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


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

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



Цитата(HackMan @  14.2.2007,  01:29 Найти цитируемый пост)
По завершению программы позаботиться ли Delphi об освободжения памяти GetImage?

позоботится, но не делфи, а ОС.
однако стоит раньше самому позаботиться, ибо ресурсы ОС не бесконечны ;)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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