asiasz75 Posted November 23, 2010 Report Share Posted November 23, 2010 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 More sharing options...
asiasz75 Posted November 23, 2010 Author Report Share Posted November 23, 2010 Sorki za dodatkowe "śmieci" w kodzie w poprzednim poscie - nie wiem jak tam się dostały ... Link to comment Share on other sites More sharing options...
Adam27 Posted November 23, 2010 Report Share Posted November 23, 2010 Czy SetLength na tablicach dynamicznych wymaga jakichś dodatkowych "czarów"? Nie. 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. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link to comment Share on other sites More sharing options...
asiasz75 Posted November 23, 2010 Author Report Share Posted November 23, 2010 ... 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 More sharing options...
asiasz75 Posted November 23, 2010 Author Report Share Posted November 23, 2010 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 More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.