'Invalid memory Acess' dans un code pour un serveur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

'Invalid memory Acess' dans un code pour un serveur

Message par stombretrooper »

Bonsoir, Voilà je codes un serveur pour mon MMORPG et j'ai un message erreur 'invalid memory acess' je ne sais pas d'où vient le problème ;

l'erreur se produit à la ligne 45 'SendNetworkData(JoueurID...'

Code : Tout sélectionner

Procedure traitement(*s)
*my = AllocateMemory(2000)
CopyMemory(*s+6,*my,2000)
FreeMemory(*s)
UnlockMutex(traite)
ID = PeekB(*my)
JoueurID=Systeme(ID)
Sock=cherche_sock(JoueurID)

*free=*my
*my+1
  Select ID
    Case 3 ;connection au serveur d'un nouveau joueur
    
      nomperso$=PeekS(*my);pseudo
      Joueur(Sock)\compte_pseudo=nomperso$
      *my=*my+MemoryStringLength(*my)+1
      Debug PeekS(*my);version du client-inutile pour le moment peut etre supprimer ?
      site$="http://kraessor.free.fr/GAME/"
      
      ;chargement des principals informations concernant le compte du joueur
      Joueur(Sock)\compte_id=Val(GetHttp(site$+"info.php?alpha=id&pseudo="+nomperso$))
      joueurid=Joueur(Sock)\compte_id
      Joueur(Sock)\position_map=GetHttp(site$+"info.php?alpha=niveau&pseudo="+Str(joueurid))
      Joueur(Sock)\position_x=Val(GetHttp(site$+"info.php?alpha=x&pseudo="+Str(joueurid)))
      Joueur(Sock)\position_y=Val(GetHttp(site$+"info.php?alpha=y&pseudo="+Str(joueurid)))
      compte_silver$=GetHttp(site$+"info_compte.php?alpha=silver&id="+Str(joueurid))
      
      ;compte silver système
      If compte_silver$<>"" And compte_silver$<>"non" 
      Joueur(Sock)\compte_niveau="oui"
      Else
      Joueur(Sock)\compte_niveau="non"
      EndIf
      
      ;envoie d'un message pour configuré le joueur au départ
      *buffer=AllocateMemory(1000)
      *pointeur=*buffer
      PokeB(*pointeur,5)
      *pointeur+1
      info$="position_set("+Str(Joueur(Sock)\position_x)+","
      info$+Str(Joueur(Sock)\position_y)+",'"+Joueur(Sock)\position_map+"');"
      info$+"info_set('"+Str(Joueur(Sock)\compte_id)+"','"+Joueur(Sock)\compte_niveau+"')"
      PokeS(*pointeur,info$)
      [b][color=#444444][color=red]SendNetworkData(JoueurID, *buffer,[/color] *pointeur)[/color][/b]
      
      ;envoie d'un message pour popup de départ
      FreeMemory(*buffer)
      *buffer=AllocateMemory(2000)
      *pointeur=*buffer
      PokeB(*pointeur,8)
      *pointeur+1
      PokeB(*pointeur,1)
      *pointeur+1
      draw$="draw_text(x+5,y+20,'Décembre arrive à Blendra##Et oui, lhiver est arrivé,#La météo est donc passé au blanc#La temperature a chutée');";
      PokeS(*pointeur,"Nouveauté")
      *pointeur+MemoryStringLength(*pointeur)
      PokeS(*pointeur,draw$)
      *pointeur+MemoryStringLength(*pointeur)
      PokeS(*pointeur,"")
      *pointeur+MemoryStringLength(*pointeur)
      SendNetworkData(JoueurID,*buffer,*pointeur+100)
  EndSelect
FreeMemory(*free)
EndProcedure
Quelqu'un a-t'il la solution ou une idée d'où pourrait venir le problème ?
Anonyme

Message par Anonyme »

Bonsoir , le 3° paramètre prends une taille , pas un pointeur.

Code : Tout sélectionner

SendNetworkData(JoueurID, *buffer,*pointeur)
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Message par stombretrooper »

J'ai modifié et sa ne fonctionne toujours pas :? l'erreur est toujours au même endroit
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

SendNetworkData(JoueurID, *buffer,memorysize(*buffer)) ne marche pas ?
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Message par stombretrooper »

merci c'est plus juste que ce que j'avais mis :) mais sa marche toujours pas 'invalid memory acess' :? et toujours au même endroit :?:
Anonyme

Message par Anonyme »

Debug *buffer renvois quoi ?
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Message par stombretrooper »

:? J'ai trouvé mon erreur sa vient de 'joueurID' j'ai mis deux variables qui portent le même nom mais qui serve à deux choses différentes l'erreur ne se produit plus merci :)
Anonyme

Message par Anonyme »

Pense à tester tes allocations avec une macro :

Code : Tout sélectionner

Macro TestMemory(Memory)
  if Memory=#Null
     MessageRequester("Erreur","Impossible d'allouer la mémoire demandée") 
     End
  endif
endmacro


*Buffer = allocateMemory(1000) : TestMemory(Memory)
Utilise aussi des constantes pour taggé tes messages , quand tu mettras les mains dans le code dans quelque temps , tu ne seras pas perdu.

N'hésite pas à abuser des commentaires , même si ils te paraissent inutiles pour le moment.

@+
stombretrooper
Messages : 117
Inscription : dim. 21/déc./2008 18:39

Message par stombretrooper »

merci des conseils :)
Répondre