Procédure récursive et pointeurs
Bonjour,
Une procédure récursive utilise des pointeurs typés sur une "class".
Après initialisation par New puis création et utilisation si je détruit
le pointeur par Dispose j'obtiens une erreur EAccesViolation.
En définitive ma procédure ne fonctionne sans problème que si je ne détruit pas les pointeurs ?
Comment peut on résoudre ce dilemme ?
PL
[delphi4]proc. récursive - compléments
Bonjour
Je constate que ma question etait trop succinte, pas suffisamment explicite.
Le contexte d'utilisation des pointeurs se faisant dans un arbre binaire.
J'indique donc, ci-dessous, le code limité au strict nécessaire pour la compréhension.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| interface
type
...
FContenu = record
case tip : TypeNoeud of
CTE : (Valeur : Txy);
...
end;
PtrFonc = ^TFonc;
TFonc = class //object
public
Gauche, Droite : PtrFonc;
v : FContenu; // record
Function ...
...
Function CreeArbre(ch : string) : boolean;
Private
end;
implementation
....
Function TFonc.CreeArbre(ch : string) : boolean;
var
...
p1, p2 : PtrFonc;
procedure Coupe(c : string; ...);
var S : string;
begin
new(p1);
p1^ := TFonc.Create; // ( create est héritée)
gauche := p1;
v.tip := ...
...
CreeArbre := gauche^.CreeArbre(c);
end;
....
// P1.Free; p2.Free; //////////////////// Free -> ERREUR
end;
begin // CreeArbre
//
CreeArbre := false;
....
if ch[1]= ... then begin
Coupe(copy(ch,2,lon-1),...);
exit;
end;
....
end; |
Une autre procédure, semblable à 'coupe' utilise les pointeurs p1 et p2.
Merci pour vos participations.