Bonjour à tous,
Je planche depuis ce matin sur un problème avec Tdictionary et l'utilisation de ****.Free ou FreeAndNil(***)
J'ai cru comprendre qu'après utilisation, il fallait vide la variable, mais actuellement cela ne me pose que des problèmes.
A moins qu'il ne soit nécessaire d’exécuter cela a la fermeture de l'application ?
Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Var Messages : TMessage; FMsg : String; Begin FMsg := 'Paris'; Messages := TMessage.Create; // ## Messages est actuellement vide ## DictionaryMessage.TryGetValue(FMsg, Messages); // ## Messages contient ce qu'il faut ## FreeAndNil(Messages); ou // ## L'un ou l'autre ## Messages.Free; // -----> A partir d'ici, DictionaryMessage (Paris) devient vide <--------
Un exemple concret, qui pose problème a la seconde exécution:
Merci.
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
17
18
19
20
21
22 else if cmd='RXQuestionEditGroupe' then begin //On extrait, et on set FMsg:= Copy(str, Pos('@', str)+1, Length(str)-Pos ('@', str)); //maman@groupeC idx:=pos('@',FMsg); FMsg2:=copy(FMsg,1,idx-1); //maman FMsg3:= Copy(FMSG, Pos('@', FMSG)+1, Length(FMSG)-Pos ('@', FMSG)); //GroupeC form2.AddInfoDebugger('RECEPTION','Demande de Modif d''une question (Groupe) dans: '+FMsg2+' => '+FMsg3); Messages := TMessage.Create; if (DictionaryMessage.TryGetValue(FMsg2, Messages) = True) then begin Messages.Groupe := FMsg3; DictionaryMessage.AddOrSetValue(FMsg2, Messages); end else begin form2.AddInfoDebugger('ERREUR','Demande de modif de la question, elle n''existe pas: '+FMsg); tmycontext(acontext).Connection.IOHandler.WriteLn('Error@Demande de modif de la question, elle n''existe pas !'); end; FreeAndNil(Messages); end
Partager