Bonjour,

En Delphi , j'utilise un objet TVirtualStringtree
pour stocker des éléments dans un arbre.

À chaque élément Node : PVirtualNode de mon arbre, j'associe une structure complémentaire
que j'ai créée dynamiquement lors de la création de chaque Node grâce à la propriété Data.

voici un résumé de mon code pour être plus clair :

...
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
23
24
25
26
27
28
29
30
31
32
33
34
 
type
TTreeDataGeneral = record
  type_node : integer; 
 
  Father : TTreeDataFather;
  Child : TTreeDataChild;
 
  Modified : boolean;
  Text: string;
  ImageIndex: Integer;
  ...
end;
 
PTreeDataGeneral = ^TTreeDataGeneral;
 
 
procedure TfmMessages.creation_node_pere(Q : TZIbSqlQuery);
var
  NodeData: PTreeDataGeneral;
  Nodepapa: PVirtualNode;
 
begin
  // create tree
  // je reserve la place necessaire pour chaque node, on utilise la taille de la structure déclaré TTreeData
  Tree_messages.NodeDataSize := SizeOf(TTreeDataGeneral);
  // initialise un node
  Nodepapa := Tree_messages.AddChild(nil);
  // récupère l'adresse de data
  NodeData := Tree_messages.GetNodeData(NodePapa);
 
...
 
end;


Mon problème : depuis quelque temps, le nombre de données affiché dans l'arbre a considérablement augmenté et
après plusieurs heures d'utilisation du logiciel ( plusieurs chargements de l'arbre), une erreur "mémoire insuffisante" s'affiche.

Le logiciel monte à 60 mo d'espace ram.

Je pensais que lorsque de détruisait l'arbre ou la fenêtre de l'arbre, un free était fait sur mes structures.


Comment faire pour libérer une structure quand on a son pointeur ? Merci.