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

Code : Tout sélectionner

ClearList listea()
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 :roll: :oops:

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 ! :D