...
ca parait normal en fait.
ce que tu constates c que la memoire n'est "Zéroifiée" (remplit de 0) apres un redim. mais elle est libérée puisque dans le code suivant le contenu de la memoire change apres le redim :
ce que tu constates c que la memoire n'est "Zéroifiée" (remplit de 0) apres un redim. mais elle est libérée puisque dans le code suivant le contenu de la memoire change apres le redim :
Code : Tout sélectionner
; le tableau au départ
Dim a(5)
a(0)=100
a(1)=1000
a(2)=10000
a(3)=100000
a(4)=1000000
; redim du tableau
Dim a(0)
; on fait bosser un peu le programme
For i=0 To 10
x$=Str(i)
Next
; contenu du tableau
For i=0 To 4
Debug PeekL( @a(0) + (i*4) )
Next
et avec des chaines de caracteres :
le pointeur est nul, la memoire est donc a priori libérée
Code : Tout sélectionner
; le tableau au départ
Dim a.s(1)
a(0)="abc"
a(1)="xyz"
; redim du tableau
Dim a.s(0)
; on fait bosser le programme un peu
For i=0 To 100
x=x+1
Next
; contenu du tableau
Debug "a(0) = " + PeekS(@a(0))
objection votre honneur 

Code : Tout sélectionner
; le tableau au départ
Dim a(5)
a(0)=100
a(1)=1000
a(2)=10000
a(3)=100000
a(4)=1000000
adresse=@a(0)
; redim du tableau
Dim a(0)
; on fait bosser un peu le programme
For i=0 To 10
x$=Str(i)
Next
; contenu du tableau
For i=0 To 4
Debug PeekL( @a(0) + (i*4) )
Next
Debug "-------------------"
Debug @a(0)
Debug adresse
Debug "--------Pas de pot :)--------"
Debug PeekL(adresse)
Code : Tout sélectionner
Dim a(5)
adr=@a() ; adresse de début
Dim a(0)
adr1=@a() ; adresse de début
Debug adr
Debug adr1
donc normal que tu ne retrouves pas les valeurs précédentes avec
Code : Tout sélectionner
Debug "a(0) = " + PeekS(@a(0))
ca n'empeche qu'on a aucune preuve comtois que la memoire n'est pas libérée
comme je disais la mémoire n'est pas, ca c sûr, "Zéro-ifier" donc elle reste en l'état tant qu'elle est pas utilisée par autre chose.
ca m'étonnerait que fred ne libère pas la mémoire alors meme qu'il le dit dans la doc... mais bon toutes facons il est en vacances
comme je disais la mémoire n'est pas, ca c sûr, "Zéro-ifier" donc elle reste en l'état tant qu'elle est pas utilisée par autre chose.
ca m'étonnerait que fred ne libère pas la mémoire alors meme qu'il le dit dans la doc... mais bon toutes facons il est en vacances

d'ailleurs regarde çà :
Code : Tout sélectionner
mem=AllocateMemory(16)
PokeL(mem+0,100)
PokeL(mem+4,1000)
PokeL(mem+8,10000)
FreeMemory(mem)
Debug PeekL(mem+0)
Debug PeekL(mem+4)
Debug PeekL(mem+8)
Si on considére que le fait de
dimensionner ou redimensionner un tableau 'Zerotifie' tous les élements.
Dim a$(2)
a$(1)="aaa"
Dim a$(1)
Debug a$(1) => Affiche "" ou rien
Mais
Dim a$(2)
a$(0)="aaa"
Dim a$(0)
Debug a$(0) => Affiche 'aaa'
Ce qui laisserais pensais que Pb à bien libéré la memoire et ce n'est donc pas la peine de zerotifié. Par contre il doit y avoir un leger bug car Pb se rapelle de l'adresse du tableau a(0)
dimensionner ou redimensionner un tableau 'Zerotifie' tous les élements.
Dim a$(2)
a$(1)="aaa"
Dim a$(1)
Debug a$(1) => Affiche "" ou rien
Mais
Dim a$(2)
a$(0)="aaa"
Dim a$(0)
Debug a$(0) => Affiche 'aaa'
Ce qui laisserais pensais que Pb à bien libéré la memoire et ce n'est donc pas la peine de zerotifié. Par contre il doit y avoir un leger bug car Pb se rapelle de l'adresse du tableau a(0)
Faut faire attention lorsque l'on libère la mémoire, les informations qui s'y trouve ne sont pas perdu. Elles sont toujours là, sauf que le système d'exploitation ne protège plus la zone mémoire qui a été réserver pour le tableau et il va l'utiliser plus tard pour une autre tâche qui demande plus mémoire s'il en a besoin.
Donc c'est juste une protection de mémoire, si vous voulez vraiment effacer les informations qui s'y trouve vous devez le faire manuellement, genre on remet tout les bits à zéro dans la plage mémoire du tableau.
A+
Guimauve
Donc c'est juste une protection de mémoire, si vous voulez vraiment effacer les informations qui s'y trouve vous devez le faire manuellement, genre on remet tout les bits à zéro dans la plage mémoire du tableau.
A+
Guimauve