Access Violation en écriture

Access Violation en écriture - C++ - Programmation

Marsh Posté le 01-01-2011 à 19:43:34    

Bonsoir ! :D
 
Bon, j'en suis à la fin avec ma DLL, j'ai juste un ptit problème à cause d'une ligne :  
 

Code :
  1. void array_load (unsigned int n, vector<animdata> * narray, unsigned int framecount)
  2. {
  3.     (*garray)[n].anim =*narray; // celle là !
  4.     (*garray)[n].framecount = framecount;
  5. }


 
Voilà, cette ligne est sensé stocké un vector de structure animdata dans le membre "anim", que je récupère plus tard via cette fonction :
 

Code :
  1. vector <animdata> & get_vector(unsigned int id)
  2. {
  3.     return garray->at(id).anim;     
  4. }


 
Seulement, c'est que quand je laisse cette ligne "(*garray)[n].anim =*narray;" ben j'me choppe un méchant "Access Violation at address 6AF3EAD6 in module "GMDLL.dll". Write of address 00030002." lorsque je charge une animation :(
 
Voilà, si quelqu'un pouvait m'aiguiller :D
 
Merci à vous et bonne année :D  :jap:


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-01-2011 à 19:43:34   

Reply

Marsh Posté le 01-01-2011 à 19:58:16    

tu as probablement un écrasement mémoire. n est-il valide et inférieur à la taille de ton array ? garray est-il valide aussi ? Ton écrasement mémoire peut se trouver à peu près n'importe où, c'est une chose assez difficile à debugger surtout si le code est gros.

Reply

Marsh Posté le 01-01-2011 à 20:02:06    

xilebo a écrit :

tu as probablement un écrasement mémoire. n est-il valide et inférieur à la taille de ton array ? garray est-il valide aussi ? Ton écrasement mémoire peut se trouver à peu près n'importe où, c'est une chose assez difficile à debugger surtout si le code est gros.


Vi, garray est en global, ensuite y'a une fonction d'initialisation "garray = new vector<animstruct>;" qui est mise dans la fonction main, aussi il est automatiquement resizé lorsqu'un nouvel array doit être chargé


Message édité par Terminapor le 01-01-2011 à 20:02:36

---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-01-2011 à 20:10:13    

vérifie avec un debugger la valeur de l'adresse "(*garray)[n].anim" à un moment où tu es sur qu'elle est valide, ensuite , au moment de l'affectation, et enfin au moment du plantage ( en debug). Si l'adresse a changé c'est que tu as un écrasement mémoire qui t'invalide cette adresse.

Reply

Marsh Posté le 01-01-2011 à 21:14:11    

global dans un DLL == drame en perspective

Reply

Marsh Posté le 01-01-2011 à 21:32:31    

Joel F a écrit :

global dans un DLL == drame en perspective


Pas forcément, à la base j'me servais d'une variable global pour remplir mon tableau, et ça marchait niquel (mais qu'une seule animation quoi :( )


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 01-01-2011 à 22:26:06    

Aah, ben j'ai finalement résolu mon problème en virant la structure d'animations de garray (qui servait à rien vu qu'elle stockait le nombre de frame, et c'est le nombre de ligne des petits tableaux) et en faisant un vector < vector <animdata > > *garray :)
 
Merci d'votre aide ! :)


---------------
Perhaps you don't deserve to breathe
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed