...

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

@comtois

t'as repondu trop vite, je v voir ce que tu dis, c louche effectivement
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

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 :

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
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

et avec des chaines de caracteres :

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))
le pointeur est nul, la memoire est donc a priori libérée
Image
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

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
apparemment l'adresse n'est plus la même !!
donc normal que tu ne retrouves pas les valeurs précédentes avec

Code : Tout sélectionner

Debug "a(0) = " + PeekS(@a(0))
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

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 :P
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

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)
Image
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

en gros, on fait des accès "illégaux" à la mémoire avec nos Peek()
et çà c pas bien :twisted:
Image
LavaLava
Messages : 173
Inscription : dim. 28/mars/2004 17:42
Localisation : Provence

Message par LavaLava »

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)
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

c'est ce que je disai, il n'est pas entierement liberer, car meme si c'etait le cas, d'apres la doc, apres un dim tab(0), on ne devrait plu pouvoir utiliser tab (pb nous dirai normalement tab() isnt a function, array or linked list)
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 9:26, modifié 1 fois.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Salut Dr Dri,

tu crois que c'est si utile ? alors meme qu'il suffit d'écrire :

for i=0 to n : a(i)=def : next

en plus au niveau de la syntaxe je vois pas comment faire
déjà qu'on peut faire dim a(1,2,3,4,5,6,7,8,9,...) alors comment rajouter l'option dont tu parles ?
Image
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

...
Dernière modification par Dr. Dri le lun. 10/oct./2005 9:26, modifié 1 fois.
Guimauve
Messages : 1015
Inscription : mer. 11/févr./2004 0:32
Localisation : Québec, Canada

Message par Guimauve »

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
Répondre