![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
что-то с выделением памяти [D5, Win2k]
ghg © (2003-02-06 09:50:00)Дело в следующем, создаю класс (код ниже).
Потом при изменении его параметров уничтожаю его и создаю заново, но блин вылетает AccessViolation.
В связи с этим вопрос, правильно ли я описал конструкторы и деструкторы класса?
Прошу прощения за большое количество кода.
unit Unit1;
interface
uses
Windows, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, FileCtrl, math;
type
Sreda = array [1..50] of single;
type
TData_Piket = class
public
size_piket : integer;
File_name_piket, date_piket : shortstring;
x_piket, y_piket, z_piket : single;
constructor Create;
end;
Parray_piket = ^TData_Piket;
TData_Ked = class
public
kol_luch_ked, number_ked : integer;
angle_ked, radius_ked : array [1..8] of single;
piket_ked : array [1..10000] of parray_piket;
constructor Create(nked : integer);
destructor Destroy; override;
end;
TData_square = class
public
Nt_square : integer;
map_square : Tbitmap;
kol_3d_color_square : integer;
rho_3d_square : array of single;
color_3d_square : array of Tcolor;
ked_square : array [1..kol_ked] of Tdata_ked;
constructor Create;
destructor Destroy; override;
end;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button3: TButton;
DirectoryListBox1: TDirectoryListBox;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
square : Tdata_square;
ooo : file;
kol_3d_s, ked_s : integer;
piket_k : array [1..kol_ked] of integer;
implementation
{$R *.DFM}
constructor Tdata_piket.Create;
var i : integer;
begin
size_piket:=2*200+75;
date_piket:="10.10.10";
File_name_piket:="00";
x_piket:=0; y_piket:=0; z_piket:=0;
end;
constructor Tdata_ked.Create(nked : integer);
var i : integer;
begin
for i:=1 to piket_k[nked] do
begin
new(piket_ked[i]);
piket_ked[i]^:=Tdata_piket.Create;
end;
kol_luch_ked:=8; number_ked:=nked;
for i:= 1 to 8 do
begin
angle_ked[i]:=45*i; radius_ked[i]:=500;
end;
end;
destructor Tdata_ked.Destroy;
var i: integer;
begin
inherited;
for i:=1 to piket_k[self.number_ked] do
begin
piket_ked[i]^.Free;
piket_ked[i]^:=nil;
end;
end;
constructor Tdata_square.Create;
var i : integer;
begin
for i:=1 to kol_ked{ked_s} do ked_square[i]:=TData_Ked.create(i);
setlength(rho_3d_square,kol_3d_s+1);
setlength(color_3d_square,kol_3d_s+1);
for i:=1 to kol_3d_s do
begin
color_3d_square[i]:=$00000000+i*$0000001a;
rho_3d_square[i]:=i*10;
end;
kol_3d_color_square:=kol_3d_s;
for i:=1 to 3 do
begin
Rho_square[i]:=i*10; H_square[i]:=i*10;
end;
map_square:=nil;
Nt_square:=length(ked_square[1].piket_ked[1]^.Tms_piket);
end;
destructor Tdata_square.Destroy;
var i : integer;
begin
inherited;
map_square:=nil;
for i:=1 to kol_ked do ked_square[i].free;
setlength(rho_3d_square,0); setlength(color_3d_square,0);
end;
procedure TForm1.FormCreate(Sender: TObject);
var i : integer;
begin
ked_S:=0;
for i:=1 to kol_ked do piket_k[i]:=0;
piket_k[1]:=1; kol_3d_s:=10;
square:=TData_square.create;
end;
end.
Заранее благодарен.
icWasya (2003-02-06 10:42:00) [21]убери вот это
Parray_piket = ^TData_Piket;
и соответственно замени строки
piket_ked : array [1..10000] of TData_Piket;
piket_ked[i]:=Tdata_piket.Create;
begin
piket_ked[i].Free;
piket_ked[i]:=nil;
end;