Всё может быть))
Придется всетаки разобраться, а не тупо хватать любую чушь
Модератор: Модераторы
zub писал(а):Придется всетаки разобраться, а не тупо хватать любую чушь
private
arrBitmap : array[0..33] of TBitmap;
procedure TFormMain.FormCreate(Sender: TObject);
var
b:byte;
begin
for b := 0 to 22 do arrBitmap[b] := TBitmap.Create;
end;
procedure TFormMain.someName();
var
b:byte;
begin
for b := 0 to 22 do begin
// ......
Image1.Picture.Bitmap.LoadFromFile('xxx'+IntToStr(b)+'.png');
arrBitmap[b].Assign(Image1.Picture.Bitmap);
Canvas.StretchDraw(aRect,arrBitmap[b]);
end;
end;
procedure TFormMain.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
b:byte;
begin
try
finally
for b := 0 to 22 do arrBitmap[b].Free; // <== вот на этом коде вылетает SIGSEGV - почему?
end;
end;
arrBitmap : array[0..33] of TBitmap;
arrBitmap : array of TBitmap;
я ошибся... Не ведитесь на бородатыхНо: Бородатый Пупсик - оказался прав!
во..во.Придется всетаки разобраться, а не тупо хватать любую чушь
FreeAndNil(arrBitmap[b]);
(arrBitmap[b] as TBitmap).Free;
arrBitmap[b] := TBitmap.Create;
zub писал(а):Дело не в массиве а в ссылках на одно и тоже. как не заверни - дин\стат массив, список, чтото из fgl - ошибка не уйдет пока будет "двойной" вы зов деструкторов
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
StdCtrls, Grids;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
arrBitmap : array[0..33] of TBitmap;
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
b:byte;
begin
for b := 0 to 22 do arrBitmap[b] := TBitmap.Create;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
b:byte;
aRect:TRect;
begin
aRect.Top := 0;
aRect.Left := 0;
aRect.Bottom := Height;
aRect.Right := Width;
for b := 0 to 22 do begin
Image1.Picture.LoadFromFile('1.png');
arrBitmap[b].Assign(Image1.Picture.Bitmap);
Canvas.StretchDraw(aRect,arrBitmap[b]);
end;
end;
procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);
var
b:byte;
begin
try
finally
for b := 0 to 22 do arrBitmap[b].Free; // <== вот на этом коде вылетает SIGSEGV - почему?
end;
end;
end.
grot писал(а):зачем вообще здесь нужен массив ???
zub писал(а):о пользе минимальных примеров
pupsik писал(а):FreeAndNil(arrBitmap[b]);
по идее: дело в другом.Программисты дают добро на FreeAndNil(arrBitmap[b]) вместо arrBitmap[b].Free;
а я по иной причине спросил. Вы же, если не ошибаюсь, с ними плотно работаете.Я не специалист по правильным кодам.
в принципе да.Но имхо для классов генерики никаких плюсов не несут
pupsik писал(а): im_col.7z
zub писал(а):Дают, но после того как ты устранишь ошибки
zub писал(а):посмотреть на каком индексе вылет,
или например "распечатать" массив и посмотреть нет ли сразу в массиве ссылок на одно и тоже?.
Потом глянуть стек и таки узнать на освобождении чего вылет...
Но имхо для классов генерики никаких плюсов не несут
Вернуться в Обучение Free Pascal
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8