Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

что-то с выделением памяти [D5, Win2k]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо