Page 1 sur 1
liste imbriqué et libération de la mémoire
Publié : sam. 18/juin/2011 9:18
par Thyphoon
j'aurais besoin d'une confirmation
lorsque nous avons ce genre de structure
Code : Tout sélectionner
Structure listea
a.l
b.l
List listeb.q()
EndStructure
NewList listea.listea()
je fabrique un certain nombre de liste
Code : Tout sélectionner
For z=y To 99999
AddElement(listea())
For z=1 To 99999
AddElement(listea()\listeb())
Next
Next
est ce que pour les vider un simple
suffit
ou bien faut il d'abord vider les listes dans les listes sinon ça créer une fuite mémoire ?
et donc faire
Code : Tout sélectionner
ForEach listea()
clearlist listea()\listeb()
Next
clearlist listea()
qu'en pensez vous ? j'éspère que ma question est claire

Re: liste imbriqué et libération de la mémoire
Publié : sam. 18/juin/2011 12:39
par G-Rom
c'est clair.
il faut que tu vide d'abord la structure ( liste , allocation , etc... ) et qu'ensuite tu effaces la structure de la mémoire.
Re: liste imbriqué et libération de la mémoire
Publié : sam. 18/juin/2011 12:43
par Thyphoon
G-Rom a écrit :c'est clair.
il faut que tu vide d'abord la structure ( liste , allocation , etc... ) et qu'ensuite tu effaces la structure de la mémoire.
Merci beaucoup pour cette confirmation !
Re: liste imbriqué et libération de la mémoire
Publié : sam. 18/juin/2011 13:34
par Guimauve
Je dirais même plus, si la structure contient une liste des pointeurs vers des blocs mémoires (AllocateMemory()), il faut libérer ces blocs mémoires avant de faire un ClearList() si non il va y avoir un problème de fuite mémoire.
Exemple :
Code : Tout sélectionner
Structure listea
a.l
b.l
List listeb.i()
EndStructure
NewList listea.listea()
For z = 0 To 9
AddElement(listea())
listea()\a = 25
listea()\b = 1254
For w = 0 To 9
AddElement(listea()\listeb())
listea()\listeb() = AllocateMemory(Random(1000) + 500)
Next
Next
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Pour tout vider proprement il faut faire
ForEach listea()
listea()\a = 0
listea()\b = 0
ForEach listea()\listeb()
If listea()\listeb() <> #Null
Debug MemorySize(listea()\listeb())
FreeMemory(listea()\listeb())
EndIf
Next
ClearList(listea()\listeb())
Next
ClearList(listea())
A+
Guimauve
Re: liste imbriqué et libération de la mémoire
Publié : sam. 18/juin/2011 14:05
par Thyphoon
Guimauve a écrit :Je dirais même plus, si dans la structure contient une liste des pointeurs vers des blocs mémoires (AllocateMemory()), il faut libérer ces blocs mémoires avant de faire un ClearList() si non il va y avoir un problème de fuite mémoire.
Merci Guimauve c'est ce que j'en avais déduit !
