Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
ВнизПереполнение памяти Найти похожие ветки
← →
-matrix- © (2006-01-14 21:53) [0]В программе используются функции типом Tbitmap. На протяжении долгой работы программа постепенно поедает всю оперативную память (;. Мне кажется, что это из-за невозможности реализовать у функции ".free". Как это можно исправить без введения новых типов Tbitmap?
PS Просто это удобно - canvas.draw(0,0,graph), где graph - это та самая функция.
← →
з. танька (2006-01-14 21:57) [1]напиши свою маленькую процедуру что то типа
procedure CanvasDraw(x,y: integer; canvas: TCanvas);
var
bmp: TBitMap;
begin
bmp := graph;
canvas.draw(x,y,bmp);
bmp.Destroy;
end;
← →
-matrix- © (2006-01-14 22:05) [2]напиши свою маленькую процедуру что то типа
Не-а! Пробовал еще раньше. Это тоже не идет.
И, в таком уж случае, мне легче саму функцию модифицировать в процедуру с параметром "var bm:Tbitmap" и перед каждым ее вызовом создавать временный битмап и его уничтожать. Мне-ж что-то оригинальное надо (;
PS Быстро-то у вас отвечают...
← →
з. танька (2006-01-14 22:17) [3]
> Не-а! Пробовал еще раньше. Это тоже не идет.
похоже видала я эту функцию. не поворачивает ли она картинку на заданный угол? функция косячная с delphiworld, она создавала два битмапа, один возвращала в результате, а другой просто-так оставался болтаться в памяти. так что через некоторое время прога действительно съедала всю память. дело в том что в моем-то примере утечки нету.. только если функция виновата..
> PS Быстро-то у вас отвечают...
бессонница у меня, да...
← →
VirEx © (2006-01-14 22:20) [4]используй только один экземпляр Tbitmap, а в функциях работай через указатели:
function getBitmap:Pointer;
var
b:TBitmap
begin
...
b:=TBitmap.create();
b.LoadFromFile и т.п.
result:=@b;
end;
procedure FreeBitmap(b:Pointer);
begin
TBitmap(b).free/destroy;
end;
← →
-matrix- © (2006-01-15 01:36) [5]2 з. танька: Спасибо!
Решил пересмотреть свой код по твоему примеру - как же это, у одних работает, а у других - нет? Я же тоже самое до опубликования темы делал - не получалось, поедал память... Так вспомнилось, что graph функция вызывала другую bitmap"ную функцию, и она уже давала утечку лишних значений. Так что создал временную bitmap для второй функции - и теперь не ест ничего лишнего.
А все-таки жаль, красиво могло быть, если бы значения не убегали... Имхо, недочет болрандцев.
PS Функции мои, а не с delphiworld"а.
PPS Хм, а что за delphiworld-то? Где он находится? Просто я когда-то был дизайнером одноименного сайта, искалечил его внешний вид (ну, получилось так (; ) и уехал, доступа к сайту месяца 3 не было. Когда приехал, нарисовал классное главное меню - а он (сайт) возьми и пропади. Админа понимаю, дела, времени обновлять не было... Но хороший сайт был. Крупный.
← →
antonn © (2006-01-15 09:20) [6]-matrix- © (15.01.06 1:36) [5]
PPS Хм, а что за delphiworld-то? Где он находится?
http://www.delphiworld.narod.ru/
← →
баклан (2006-01-15 10:16) [7]result:=@b;
может гоню, но достаточно result:=b; да имысл прямо указатели юзать? когда можно возвращать TBitmap сразу. имхо, бред
← →
VirEx © (2006-01-15 10:59) [8]
> [7] баклан (15.01.06 10:16)
ну юзай типизированными переменными (объектами корректней будет называть) ктож тебя баклана сдерживает?
← →
Набережных С. © (2006-01-15 11:04) [9]
> баклан (15.01.06 10:16) [7]
> имхо, бред
Именно. Кроме того, что b: TBitmap и без того указатель, это еще и локальная переменная, пытаться обратиться к которой за пределами приведенной функции невозможно.
← →
баклан (2006-01-15 11:37) [10]Набережных С. © (15.01.06 11:04) [9]
дык про это и говорю. что-то ваще не то творится )
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.038 c