copymemory et pointeur
filperj a marqué dans son code :
c'est parce que PureBasic met au début de l'ancienne allocation de mémoire 4 Octets à zéro :; curieux, je perds mes informations
De plus, c'est risqué de prendre une place mémoire libre, sans que PureBasic soit au courant...texte.s
texte= "AAAAAAAAAA"
*ptr.BYTE=@texte
Debug "Adresse mémoire où est stocké le texte " + PeekS (*ptr)+ " : " + Hex (@texte)
texte= LSet ( "R" ,60000, "-" )
Debug "Adresse mémoire où est stocké le texte de 60000 caractères : " + Hex (@texte)
For t=1 To 20
Debug Str (t)+ " : " + Str (*ptr\b)+ " -> " + Chr (*ptr\b)
*ptr+1
Next

Bah en même temps dans son code il n'ajoute pas "nicolas" dans la liste... Si on remplace la ligne ";curieux..." par ajoute(@agenda) le debug fonctionne
Dri 
Code : Tout sélectionner
Structure entree_agenda
Nom.s
age.l
EndStructure
Procedure CopieEntree(*src.entree_agenda,*dst.entree_agenda)
*dst\Nom=*src\Nom ;<- seul façon stable de copier une chaîne de structure à structure, à ma connaissance
*dst\age=*src\age
EndProcedure
Structure liste
*suivant.liste
;*precedent.liste <- inutilisé pour l'instant
entree.entree_agenda
EndStructure
Global *Pointeur_debut.liste
Global agenda.entree_agenda
Procedure ajoute(*ajouter.entree_agenda)
*nouveau.liste=AllocateMemory(SizeOf(liste))
CopieEntree(*ajouter,@*nouveau\entree)
*nouveau\suivant=*Pointeur_debut
*Pointeur_debut.liste=*nouveau
EndProcedure
agenda\Nom="david"
agenda\age=10
ajoute(@agenda)
Debug *Pointeur_debut\entree\Nom
Debug *Pointeur_debut\entree\age
agenda\Nom="nicolas"
agenda\age=11
ajoute(@agenda)
Debug *Pointeur_debut\entree\Nom
Debug *Pointeur_debut\entree\age

-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
@erix14 : Oui c'est plus imple, mais aussi beaucoup plus contraignant. Là on parle plus de char*, mais de char[TAILLE] (équivalent en C)
@Dr.Dri : Mais j'ai pas les données en doublons. Je me simplifie peut-etre pas la vie, mais je reste générique et ça marche dans tous les cas, comme si c'était PB qui l'avait fait (sauf qu'il faut désallouer tout seul la mémoire)
@Dr.Dri : Mais j'ai pas les données en doublons. Je me simplifie peut-etre pas la vie, mais je reste générique et ça marche dans tous les cas, comme si c'était PB qui l'avait fait (sauf qu'il faut désallouer tout seul la mémoire)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
@erix14 : Oui c'est plus imple, mais aussi beaucoup plus contraignant. Là on parle plus de char*, mais de char[TAILLE] (équivalent en C)
@Dr.Dri : Mais j'ai pas les données en doublons. Je me simplifie peut-etre pas la vie, mais je reste générique et ça marche dans tous les cas, comme si c'était PB qui l'avait fait (sauf qu'il faut désallouer tout seul la mémoire).
Les méthodes évoquées ne sont valables que pour des structures connues, donc impossible de créer des fonctions génériques qui marcheraient pour toutes les structures. Il faut que les paramètres des fonctions soient typés. Moi je n'utilise que des longs banals dans mes fonctions
@Dr.Dri : Mais j'ai pas les données en doublons. Je me simplifie peut-etre pas la vie, mais je reste générique et ça marche dans tous les cas, comme si c'était PB qui l'avait fait (sauf qu'il faut désallouer tout seul la mémoire).
Les méthodes évoquées ne sont valables que pour des structures connues, donc impossible de créer des fonctions génériques qui marcheraient pour toutes les structures. Il faut que les paramètres des fonctions soient typés. Moi je n'utilise que des longs banals dans mes fonctions
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Code : Tout sélectionner
Structure Bidon
a.l
b.l
s.s
d.w
EndStructure
*a.Bidon = AllocateMemory(SizeOf(Bidon))
*a\a = 10
*a\b = 20
*a\s = "Hello"
l = *a
s = PeekL(l+8)
Debug GlobalSize_(s)
FreeMemory(*a)
Debug GlobalSize_(s)
Perso je persiste dans mes AllocateMemory(), au moins je sais ce que je fais et je sais que j'aurais pas de la mémoire qui va se ballader....
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Oué je sais mais que PB ne peut pas deviner.
Par contre pour le *a\s = "", ca marche pas non plus : GlobalSize_() renvoi 2. Donc toute la mémoire n'est pas libérée... Faut faire un FreeMemory() supplémentaire. le *a\s = "" ne sert à rien...
Par contre pour le *a\s = "", ca marche pas non plus : GlobalSize_() renvoi 2. Donc toute la mémoire n'est pas libérée... Faut faire un FreeMemory() supplémentaire. le *a\s = "" ne sert à rien...
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !