IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

violation d'accés ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut violation d'accés ?
    salut tout le monde je suis en train de faire un tetris avec sdl et c++ .
    j'ai crée pour le moment une classe cube et une classe forme dans la quelle j'ai crée un vector <cube> (puisque chaque piece est formée de 4 cube)
    apres pour chaque fonction membre de la clsse forme je fais une boucle pour appeler les fonction menbre des 4 cube .
    voila l'exemple de la fonction dep_bas dans forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Forme::dep_bas(int carte[][12], SDL_Rect position)
    { 
    	for(int i=0;i<4;i++)
     
    	  m_cube[i].dep_bas(carte,&position);
    }
    et voila dep_bas dans cube:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Cube::dep_bas(int carte[][12], SDL_Rect *posi)
    {   
    	  if(carte[posi->x][posi->y + 1 ]  != 0 || posi->y == 12)
     
    		  m_mov_valid =  false;
     
    	  else      
    		         posi->y++;
     
     
    }
    voila je precise que j'utilise le tableau carte pour detreminer chque position de carre dans la figure du jeu .
    la compilation se fait normalemnt : aucune erreur .
    mais lors de l'execution le programme se plante et me sort cette erreur

    Exception non gérée à 0x00411b86 dans Tetris.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00089518.


    et on m'indique cette ligne dans la fonction dep_bas de cube:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if(carte[posi->x][posi->y + 1 ]  != 0 || posi->y == 12)
    je ne vois l'origine de cette violation d'accés !!

    merci pour votre lecture

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Je dirais que ça sent le pointeur fantome.
    Déja le simple fait d'extraire l'adresse d'un argument de fonction... non pas que cela soit interdit, mais ce n'est pas considéré comme un bonne façon de faire. A mon avis l'erreur se situe ailleurs (comprendre qu'elle peut vraiment être n'importe où, avec les pointeurs fantomes...) mais ce ne serait pas plus mal de l'enlever, et de manière générale d'utiliser des réfèrences.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Quand cela plante, quelles sont les valeurs de : posi, posi->x, posi->y

    De plus, et ce n'est peut être pas lié à ton problème, je n'arrive pas à comprendre le type du paramètre carte : int carte[][12], pourquoi est ce que une dimension est absente (et en plus la première). C'est probablement syntaxiquement correct mais c'est pas simple à comprendre
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    oui ram_0000 c'est ca !!!
    j'ai trouvé dans pos->x -13108 ce qui explique cette erreur puisque cela depasse les capacites du tableau .

    pour votre question je met carte[][12] pour faire la difference avec la valeur
    du tableau carte[8][12]..en fait le compilateur a juste besoin de la 2eme coordonné pour comprendre qu'il s'agit d'un tableau.(pour etre honnete moi aussi j'ai trouvé cette expression dans un code source ....donc c'est ma propre interpretation )


    pour zais_ethael j'ai pas vraiment compris cette histoire de pointeur fantome.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Un pointeur fantome est un pointeur qui pointe vers une donnée sur laquelle on a déja fait un free/delete. C'est un type d'erreur particulièrement malsain en C ou C++, parceque contrairement à un pointeur à NULL non seulement on ne peut pas les détecter mais en plus ça ne plante pas systématiquement (un code qui ne fonctionne pas du tout vaut mieux qu'un code qui plante quand ça lui chante, dans le premier cas on le voit tout de suite aux tests, dans le second...).
    Comme ton erreur indique une violation d'accès sur une adresse qui n'est pas NULL c'est ce à quoi j'ai pensé, mais apparament c'était juste un dépassement de tableau. Maintenant il va falloir te demander comment il se fait que ton pos->x est à une valeur incohérente.

  6. #6
    Membre éclairé Avatar de guitariste
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 245
    Par défaut
    ok je vois c'est quoi merci.
    pour pos->x c'est juste un probleme d'initialisation : c'est deja reglé !!
    merci a tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ReportPrinterDialog (QR2) : violation d'accès..
    Par Harry dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2004, 14h04
  2. [XMLDocument] Violation d'accès
    Par xant dans le forum Composants VCL
    Réponses: 8
    Dernier message: 29/09/2004, 15h39
  3. requete / violation d'accès
    Par marie253 dans le forum Bases de données
    Réponses: 4
    Dernier message: 13/08/2004, 13h29
  4. Violation d'acces apres Execute
    Par SegmentationFault dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 10/08/2004, 16h23
  5. Violation d'accès apres Close
    Par SegmentationFault dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/07/2004, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo