Bonjour à vous,
J'ai un objet TCoupeDeveloppee qui contient une propriété FListeDesBranches de type TList.
Le FListeDesBranches contient des objets de type TBrancheCoupeDeveloppee.
Je suis confronté à ce qui semble être un bug du TList, à savoir, un segfault lors de la modification d'un item de FListeDesBranches.
Voici les fonctions d'ajout, d'extraction et de modif:
La fonction AddBranche fonctionne très bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 procedure TCoupeDeveloppee.AddBranche(const S: TBrancheCoupeDeveloppee); var pB : ^TBrancheCoupeDeveloppee; begin AfficherMessageErreur(Format('%s.AddBranche: %s', [ClassName, S.NomBranche])); New(pB); pB^ := S; FListeDesBranches.Add(pB); end;
Aucun problème pour GetBranche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 function TCoupeDeveloppee.GetBranche(const Idx: integer): TBrancheCoupeDeveloppee; var pB : ^TBrancheCoupeDeveloppee; begin AfficherMessageErreur(Format('%s.GetBranche: %d', [ClassName, Idx])); pB := FListeDesBranches.Items[Idx]; result := pB^; AfficherMessageErreur(Format('%s.GetBranche: %d - %s', [ClassName, Idx, result.NomBranche])); end;
Le modificateur qui pose problème:
J'ai plein d'autres listes qui contiennent des objets et je ne rencontre aucun problème
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TCoupeDeveloppee.PutBranche(const Idx: integer; const S: TBrancheCoupeDeveloppee); var pB : ^TBrancheCoupeDeveloppee; begin AfficherMessageErreur(Format('%s.PutBranche: %d / %d - %s', [ClassName, Idx, FListeDesBranches.Count-1, S.NomBranche])); pB := self.FListeDesBranches.Items[Idx]; // affectation de la nouvelle valeur pB^ := S; // ici, on est OK AfficherMessageErreur(Format('002: %d - %s - %d', [pB^.NumeroBranche, pB^.NomBranche, pB^.GetNbVisees])); AfficherMessageErreur(Format(' -- %d / %d', [Idx, self.FListeDesBranches.Count])); // L'affectation ci-dessous provoque le segfault // même avec un Idx valide self.FListeDesBranches.Items[Idx] := pB; // segfault incompréhensible end;
Je ne comprends pas pourquoi je peux accéder à un item d'un TList et ne pas pouvoir le modifier.
Ce genre de bug exaspérant est de nature à faire abandonner la programmation.
Partager