string et allocation mémoire

Programmation d'applications complexes
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

string et allocation mémoire

Message par nico »

Dans ce cas ci, la zone mémoire du string est-elle libérée?

Code : Tout sélectionner

Structure liste 
  Nom.s 
EndStructure 

*agenda.liste=AllocateMemory(SizeOf(liste)) 
*agenda\Nom="Frederic"
adresse=@*agenda\Nom
freememory(*agenda)


debug peeks(adresse)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Si on met ça au vote , je dis non .

Code : Tout sélectionner

Debug SizeOf(liste)
Retourne 4 octets , normal .

Alors je pense que AllocateMemory(4) ne réserve que 4 octets ?
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Oui, il n'y a que 4 octets de réservé, mais ce que je me demande; c'est que devient la mémoire allouée pour l'affectation de "Frederic" à la variable nom lorsque je libère la zone mémoire que j'ai créé.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

c'est une très bonne question. Je viens de comprendre ce dont tu veux parler.

Dri
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

J'ai l'impression que l'on ne détruit que le pointeur de référence, mais peut-être y a t'il un lien entre les deux.

:?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Code : Tout sélectionner

Structure liste
  Nom.s
EndStructure

*agenda.liste=AllocateMemory(SizeOf(liste))
*agenda\Nom="Frederic"
adresse=@*agenda\Nom
FreeMemory(*agenda)

Debug *agenda
Debug adresse
Debug FreeMemory(adresse)
Chez moi le dernier debug renvoi 0. Donc à priori il n'y a pas de plage mémoire alouée à "adresse" donc encore à priori, la mémoire est effectivement libérée.

Dri ^^
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Code : Tout sélectionner

Structure liste
  Nom.s
EndStructure

*agenda.liste=AllocateMemory(SizeOf(liste))
*agenda\Nom="Frederic"
adresse=@*agenda\Nom

Debug FreeMemory(adresse)
Debug FreeMemory(*agenda)

Debug *agenda
Debug adresse
Finalement il ne semble pas que cette mémoire soit libérée. Le mieux c'est de faire un *agenda\Nom = #Null$ avant de libérer la mémoire...

Dri
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Je pense que tu as raison, bien vu!
Répondre