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.
Partager