Jump to content

[Delphi] Przecieki w SetLength


asiasz75

Recommended Posts

Witam serdecznie,

 

od jakiegoś czasu walczę z przeciekami pamięci w moim programie (delphi 7).

Do badania przecieków używam MemCheck'a.

M.in. :( MemCheck raportuje mi taki oto problem z realokacją pamięci w tablicy dynamicznej:

 

Leak #6 User allocated memory (GetMem)

Size: 104

28 Occurences

call stack - 0 : (no debug info) Find error: 0012F6BC

call stack - 1 : Routine @System@@DynArraySetLength Find error: 004062E6

call stack - 2 : Module evolution.pas Routine @Evolution@ESet@setTrajsCollisions Line 1162 Find error: 004A1989

(...)

 

A linia o którą krzyczy (1162) w evolution.pas to proste wywołanie metody addColision:

 

(1162) trajectories.addCollision(j,i1,x1c,y1c,x2c,y2c,fmin.cmin,tmin);

 

Sama metoda addCollision wygląda tak:

 

procedure ETrajectory.addCollision(traj,n:smallInt;x1,y1,x2,y2,fmin,tmin:Extended);
var i:Integer;
begin
 i:=length(collisions);
 SetLength(collisions,i+1);
 collisions[i].x1:=x1;
 collisions[i].y1:=y1;
 collisions[i].x2:=x2;
 collisions[i].y2:=y2;
 collisions[i].traj:=traj;
 collisions[i].n:=n;
 collisions[i].fmin:=fmin;
 collisions[i].tmin:=tmin;
end;
���:j(�^�ViŚ�Z�VŹĘ%�+"{NśŁyhŻ �XŹ���yŚ��)
ąą���(���Ń����(���Ń����(���Ń����(���Ń����(���ąą%�ź�����Ń��Ą���ąą���(��Ń�Ń����(����Ń����(��Ń��ąą%�ź�����Ń���Ń���Ń��ąą���Ń�ŃĄ������)��()Q���Ń
ąą�����
ąą(

 

Baaardzo proszę o pomoc! Czy SetLength na tablicach dynamicznych wymaga jakichś dodatkowych "czarów"?

Link to comment
Share on other sites

... Dobrze by było, gdybyś pokazał trochę więcej kodu, głównie chodzi mi o deklarację tej tablicy i wywołanie funkcji przy której wywala błąd.

 

więc tak: linia kodu o którą krzyczy MemCheck (to juz podawałam wczesniej):

(1162) trajectories[i].addCollision(j,i1,x1c,y1c,x2c,y2c,fmin.cmin,tmin);
r6Vr+0VŹz^ViVŹĘ+rui' ESet=class(TPersistent)
 private
   { Private declarations }
 public
   { Public declarations }
 trajectories:array of ETrajectory;
....r6NśŁyhŻ+$Ę'iŚQŃąĄQAŃ(Ń(AŃąŃ(ą(AąąŃ(QŃ9(ŃŃ(ąąQŃ
ąą(QŃ
(Ń5Ń(ŃŃ1ŃŃ(ŃŃ]1Ń(ŃŃ(ŃźĄąŃ(ąŃ5       ą(ĄQŃQAŃ(ŃŃ
Ń(ŃŃŃ((

Link to comment
Share on other sites

a dodatkowo:

deklaracja pola collisions w ETrajectory oraz deklaracje pozostałych typów

 

 
ETrajectory=class(TPersistent)
 private
   { Private declarations }
 public
   { Public declarations }

 collisions: ETrajectoryCollisions;ollisions: ETrajectoryCollisions;
....

ECollision=record
x1:extended;
y1:extended;
x2:extended;
y2:extended;
n:smallInt; //node after which collision occurs
tmin:extended;
fmin:extended;
traj:smallInt; //number of prioritised trajectory colliding with the current one
end;

ETrajectoryCollisions=array of ECollision;

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...