Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171

Утечка памяти в программе , как избежать или как правильно уничтожить объект?

17.08.2013, 15:47. Показов 3915. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят помогите создал класс , вызываю его Creat после destroy ,проект работает только вот память используемая потихоньку растет через пять отрисовок на 5 кб. Грешу что не корректно уничтожаю объект. Код прилагается

подскажите в чем проблема?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
unit Brick;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    img_Fon: TImage;
    tmr_1: TTimer;
    procedure tmr_1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
 type
  TBrick = class
    constructor Create (New_X_Y:TPoint;New_Fon:TCanvas;NewX_W,NewY_H:Integer;_Brush:TBrushStyle;color:Integer);
    function Color_Brick (_color_Brick_ : array  of Integer):Integer; // рандомит цвет кубика
    // New_X_Y:TPoint - верхний левый угол кубика
    // New_Fon:TCanvas - передаю параметр на каком объекте отрисовывать
    // NewX_W,NewY_H - ширина и высота кубика
    // _Brush:TBrushStyle;color:Integer - соответственно стиль и цвет заполнения кубика
  end;
 
var
  Form1: TForm1;
  const
   //массив цветов кубиков
  _Color_Brick : array [1..12] of Integer = (clAqua, clBlue, clFuchsia, clGreen,
  clLime, clMaroon, clNavy, clOlive, clPurple, clRed, clTeal, clYellow);
 
implementation
 
{$R *.dfm}
 
{ TBrick }
 
function TBrick.Color_Brick(_color_Brick_ :array of Integer): Integer;
begin
 Randomize;
 Result := _Color_Brick[Random(12)+1];
end;
 
constructor TBrick.Create(New_X_Y: TPoint; New_Fon: TCanvas;NewX_W,NewY_H:Integer;_Brush:TBrushStyle;color:Integer);
begin
New_Fon.Brush.Style := _Brush;
New_Fon.Brush.Color := color;
New_Fon.FillRect(Bounds(New_X_Y.X ,New_X_Y.Y, NewX_W, NewY_H));
end;
 
procedure TForm1.tmr_1Timer(Sender: TObject);
var
Brick : TBrick;
I,j,c: Integer;
x,y:Integer;
begin
y := 10 ;
x := 10 ;
Randomize;
 for i := 1 to 12 do
  begin
     c := Random(12)+1;
     for j := 0 to 10 do
     begin
     Brick := TBrick.Create(Point(x,y),img_Fon.Canvas,53,25,bsSolid,_color_Brick[c]);
     Brick.Destroy;
     x := x + 53 + 3;
     end;
    x := 10;
    y := y + 25 + 3;
  end;
 
end;
 
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2013, 15:47
Ответы с готовыми решениями:

удаляется ли объект или происходит утечка памяти?
Добрый день, подскажите, при таком коде, удаляется ли объект или происходит утечка памяти? std::list<A*> entities; ...

Как уничтожить объект на сцене?
В сцене есть два скрипта уничтожения машинки. Оба работают, когда она приближается близко к кубу. Но один скрипт работает правильно, а...

Как уничтожить экземпляр класса (объект)?
Я столкнул с такой проблемой. Я не могу понять как удалять объекты класса(экземляры). Читая интернет я вижу что "мусорщик" должен...

24
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
18.08.2013, 15:53  [ТС]
Студворк — интернет-сервис помощи студентам
UI, Прошу прощения за функцию FreeAndNil - ошибка в синтаксисе, и поэтому подсказка в CnPack не отразила эту функцию.
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
18.08.2013, 15:55
Orakul, глянь на предыдущей странице.
И там достаточно было использовать Free:
Delphi
1
Brick.Free;
1
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
18.08.2013, 16:07  [ТС]
Одиночка, с начала так и сделал : память продолжила расти , после перенес Enabel таймера в под цикл память стабилизировалась

Добавлено через 10 минут
Одиночка, Ваш вариант расположения Enabel - ов предпочтительней разброс по памяти между Вашим и моим вариантом незначительный а вот по тактам Ваш лучше
0
 Аватар для Одиночка
3944 / 1869 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
18.08.2013, 21:39
Orakul, Потестил твой код. Да, есть небольшое увеличение памяти процесса относительно начального значения. По коду там всё нормально.
Оставил работающую прогу на несколько часов и потом посмотрел - использование памяти процессом сильно упало. Намного меньше, чем было в начале. Не знаю причин, но думаю это тонкости взаемодействия с операционкой.
2
 Аватар для Orakul
14 / 10 / 5
Регистрация: 07.07.2012
Сообщений: 171
18.08.2013, 21:43  [ТС]
Одиночка, Спасибо ,тему можно закрывать утечки памяти в пределах разумного
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2013, 21:43
Помогаю со студенческими работами здесь

Как уничтожить объект созданный CreateOleObject
Как уничтожить объект созданный CreateOleObject

Уничтожить объект или его сброс
Всем доброго времени суток! Как гарантированно уничтожить объект или сбросить его в начальное состояние? Для создания слайдшоу...

Арканоид. Как уничтожить объект при столкновении с другим объектом
Делаю игру арканоид кирпичи которые являются двухмерным массивом класса Box так вот что делать с ними при столкновении? как заставить...

Утечка памяти в программе
Помогите, пожалуйста, найти ошибку #include <iostream> using namespace std; #define PI1 #define NUM 115 #define SIZE (NUM*100) ...

Утечка памяти в программе
Есть приложение с ооочень странным поведением. Написали скрипт, который просто вычитывает VmSize и VmPeak процесса приложения. И согласно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru