Vider variable en memoire

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Vider variable en memoire

Message par Kwai chang caine »

Bonjour a tous

J'essaie les fonctions FTP native
J'ai ce code pour charger la variable buffer de 1000 caracteres

Code : Tout sélectionner

*Buffer = AllocateMemory(1000)
ReceiveNetworkData(ClientID, *Buffer, 1000)
J'ai 2 questions qui me viennent à l'idée

1/ Si je veux effacer cette variable, j'ai fait :

Code : Tout sélectionner

PokeS(*Buffer, Space(1000))
Ai-je tout faux ?? :roll:
Car en fait elle n'est pas effacée mais remplie d'espace.
Donc comment la vider vraiment ???
En faisant :

Code : Tout sélectionner

PokeS(*Buffer, "")
2/ Si je veux faire un RIGHT de ma variable, est ce que je peux ecrire ça sans perturber la memoire ???

Code : Tout sélectionner

*Buffer = AllocateMemory(1000)
PokeS(*Buffer, "Kcc aime les sucettes")
Debug PeekS(*Buffer)
PokeS(*Buffer, Mid(PeekS(*Buffer), 5))
Debug PeekS(*Buffer)
Merci de votre aide
Bonne journée
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

ReceiveNetworkData renvoie la taille des données écrite dans le buffer donc a priori je voie pas l'intérêt de supprimer les données dans l'espace mémoire, sinon tu peut te simplifier en libérant la mémoire avec freememory et en recréant un buffer. Je pense que ce sera plus simple que remplir le buffer de 0.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Pour détruire la mémoire allouée:
FreeMemory(*Buffer)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

nico a écrit :Pour détruire la mémoire allouée:
FreeMemory(*Buffer)
Et comme Denis me l'a appris

Code : Tout sélectionner

If *Buffer
  FreeMemory(*Buffer)
endif
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Progi1984 a écrit :
nico a écrit :Pour détruire la mémoire allouée:
FreeMemory(*Buffer)
Et comme Denis me l'a appris

Code : Tout sélectionner

If *Buffer
  FreeMemory(*Buffer)
endif
Ha oui Ha oui :D

Je dis ça car si c'est pour un truc perso, si ça crash ça gène pas beaucoup mais si on distribue un truc qui crash de temps en temps, ça craint et je peux vous dire que ça arrive, de même un gadget qui ne s'initialise pas, ça arrive aussi et ça crash

Sinon Kwai chang caine, si tu retires la barrette de RAM, plus de soucis :D

A+
Denis
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci les copains de vos reponses 8)

Donc pour remettre la variable à zero, le mieux c'est de faire FreeMemory et recreer le buffer.
Je trouve ça un peu lourd, mais si vous le dites.....dieu le dit :D
Moi je croyais que y'avais un truc comme pour une variable traditionnelle
du style a$ = "" tout en preservant l'emplacement memoire... :roll:

ReceiveNetworkData renvoie la taille des données écrite dans le buffer donc a priori je voie pas l'intérêt de supprimer les données dans l'espace mémoire, sinon tu peut te simplifier en libérant la mémoire avec freememory et en recréant un buffer. Je pense que ce sera plus simple que remplir le buffer de 0.
Tu as raison, d'ailleur comme je suis une gaufrette, j'ai evidemment viré cette fonction tout de suite.
Mais ce qui m'inquiette c'est que on reçois par exemple 1000 octets et les données en font 1020 ou moins de 1000 donc on se retrouve avec une donnée (quand on envois une phrase) coupée en deux, c'est pourquoi j'essayais de gerer ça.
Mais si ça se trouve j'ai encore rien compris au "BIN'S" :oops:
Sinon Kwai chang caine, si tu retires la barrette de RAM, plus de soucis
:lol: :lol:
J'ai fait comme t'as dit, parce que KCC, il ecoute tout ce que lui dit les emminents membres des forums.
Eh ben ça marche 8O
KCC il a bien vidé la mémoire, mais il attend que la télé elle se rallume pour etre bien sur :lol:
Parce que on voit rien en transparence dans les barettes :oops:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Et pour le MID

Est ce que mon code peut perturber la memoire ?? :oops:

Code : Tout sélectionner

*Buffer = AllocateMemory(1000) 
PokeS(*Buffer, "Kcc aime les sucettes") 
Debug PeekS(*Buffer) 
PokeS(*Buffer, Mid(PeekS(*Buffer), 5)) 
Debug PeekS(*Buffer)
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Message par PAPIPP »

Voici une petite étude de ce qui ce passe dans la mémoire
une chaine nulle $00 suffit à limiter la chaine de caractères

Code : Tout sélectionner

Macro Quote
  "
EndMacro

Macro debn(n)
  Debug quote#n# = quote + Str(n)
EndMacro

Macro debc(C)
  Debug quote#C# = quote + C
EndMacro

Macro debf(F)
  Debug quote#F# = quote + StrF(f)
EndMacro

Macro debd(D)
  Debug quote#D# = quote + StrD(D)
EndMacro

Macro debQ(Q)
  Debug quote#Q# = quote + StrQ(Q)
EndMacro

Macro debH(H)
  Debug quote#H# = quote + Hex(H)
EndMacro

Macro debHq(Hq)
  Debug quote#Hq# = quote + HexQ(Hq)
EndMacro

Procedure.s hex_viewl(*adres.l, long.l)
  hext$ = ""
  cart$ = ""
  For i = 0 To long
    num.c = PeekC(*adres + i)
    cart$ = cart$ + Chr(num)
    
    hexs.s = Hex(num) + " "
    If Len(hexs) = 2
      hexs = "0" + hexs
    EndIf
    hext$ + hexs
  Next
  ProcedureReturn hext$ + "    " + cart$
EndProcedure

Procedure hex_view(*adress, long)
  residu.i = long%16
  ilong = long/16
  For i = 0 To ilong
    ;Debug Hex(*adress + (i*16))
    ;Debug hex_viewl (*adress + (i*16), 15)
    Debug "$" + Hex(*adress + (i*16)) + "   " + hex_viewl(*adress + (i*16), 15)
  Next
EndProcedure
;****************** début des essais **********************
*Buffer = AllocateMemory(1000)
PokeS(*Buffer, "Kcc aime les sucettes")
Debug PeekS(*Buffer)
PokeS(*Buffer, Mid(PeekS(*Buffer), 5))
Debug PeekS(*Buffer)
PokeS(*Buffer, "")
Debug Len(PeekS(*buffer))
Debug PeekS(*Buffer)
Debug Hex(Val(PeekS(*buffer))) ; on a bien 00 qui limite la chaine de caractère toutefois la mémoire est toujours allouée
hex_view(*buffer,128)
CQFD
A+
:P
Répondre