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 lors de la lecture


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut Violation d'accès lors de la lecture
    Bonjour tout le monde
    J'aimerai vous exposer mon problème car je ne vois vraiment pas comment faire ^^
    Voilà enfait, j'ai une classe Personnage et une classe Fenêtre. Dans la fonction afficher de Personnage j'utilise la surface de ma fenêtre. Or Visual ne sait pas si j'ai déjà créer une Fenêtre donc il me dit "Violation d'accès" ^^
    Pour info je créer ma fenêtre avec un constructeur ainsi que mon Personnage.
    Enfait, j'aimerai savoir si c'est possible de dire :
    "Si la fenêtre est créer, Alors ça renvoie à la fonction, Sinon rien"
    Si quelqu'un à une idée

    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Peut-être qu'avec un bout de code on comprendrait mieux ?

    MAT.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Terrain.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    //Terrain.h
     
    //#ifndef Terrain
    //#define Terrain
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include "graphique.h"
    #include <SDL/SDL.h>
     
     
    class Terrain : public graphique
    {
     
    public :
    		void refresh();
    		Terrain(int alpha, int beta, int gamma, int Largeur, int Hauteur);
           SDL_Surface* getSurfaceEcran(); 
    	   SDL_Surface* getSurfaceFond(); 
    	   int PositionFondX();
    	   int PositionFondY();
    	   void chargerImage();
           void afficherImage(int posx, int posy);
     
    };
     
    //#endif
    Personnage.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    //Personnage.h
     
    //#ifndef personnage
    //#define personnage
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <iostream>
    #include <string>
    #include "graphique.h"
    #include <SDL/SDL.h>
     
     
    class Personnage : public graphique
    {
     
    public :
    		Personnage(int vitesse);
           void afficherPerso(int posIx, int posIy);
     
    };
     
    //#endif
    Pour la précision Terrain et la classe que j'appelais Fenêtre tout à l'heure
    La class graphique est la class mère dans laquelle je met tout les attributs que partagent ces 2 class.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    int main(int argc, char *argv[])
    {
     
    SDL_Event event;
     
        SDL_Init(SDL_INIT_VIDEO);
     
    //créer un terrain
        Terrain terrain(0,100,0, 500, 500);
    	terrain.refresh();
     
    //une image en fond d'écran
    	terrain.chargerImage();
    	terrain.afficherImage(0, 0);
    	terrain.refresh();
     
    //créer un Perso
        Personnage perso(50);
    		terrain.refresh();
     
     
    SDL_EnableKeyRepeat(10, 10); /* Activation de la répétition des touches */
     
    int continuer = 1;
       while (continuer)
        {
     
            SDL_WaitEvent(&event);
            switch(event.type)
            {
     
    case SDL_MOUSEBUTTONUP:
           if((event.button.x >= terrain.PositionFondX() && event.button.x <= terrain.PositionFondX() + terrain.getSurfaceFond()->w) && (event.button.y >= terrain.PositionFondY() && event.button.y <= terrain.PositionFondY() + terrain.getSurfaceFond()->h))
    		{
     
    	perso.afficherPerso(50, 50);
     
    		}
                    break;
    		}
     
    terrain.refresh();
     
    	}
     
        pause();
     
        SDL_Quit();
     
        return EXIT_SUCCESS;
    }
    Enfait la compilation marche, mais l'erreur aparait quand je clik, et donc quand je renvois la fonction .afficherPerso.

    .afficherPerso :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     void Personnage::afficherPerso(int posIx, int posIy)
     {
    	 positionImagePerso.x = posIx;
    	 positionImagePerso.y = posIy;
    	 SDL_BlitSurface(imagePerso, NULL, ecran, &positionImagePerso);
    	 SDL_Flip(ecran);
     }
    L'erreur se situe au niveau du "blitSurface".
    Voilà

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    D'accord donc j'ai bien fait de demander parce que c'était vraiment pas évident qu'il s'agissait d'un problème lié à SDL
    Au passage il existe un forum dédié.

    Il manque encore quelques informations, par exemple qu'est-ce que positionImagePerso ?

    Je suis bien incapable de t'aider à déboguer cela dit, je n'ai jamais utilisé SDL...
    On dit appeler et non renvoyer une fonction par contre, dans ce contexte.

    MAT.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 89
    Par défaut
    Pour développez en SDL, je te conseille vivement Code::Blocks. Il est
    mieux...

  6. #6
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Oulà, ça sent la mauvaise conception! Que terrain hérite de graphique ok, c'est normal, mais personnage y'a rien de logique. Je privilégirai une composition.
    Donc dans ta classe personnage, je mettrai un pointeur vers un écran. Si ce pointeur est valide, alors la fonction afficher() sera ok, sinon elle ne doit rien faire (ou bien renvoyer un code d'erreur)...

    En même temps, je connais pas bien la SDL, alors peut être que je me trompe. J'ai juste parler sémantique ici.

    Bonne continuation !

Discussions similaires

  1. Violation d'accès lors de la lecture
    Par moooona dans le forum MFC
    Réponses: 2
    Dernier message: 27/05/2010, 17h52
  2. Violation d'accès lors de la lecture
    Par Adeel.dev dans le forum SDL
    Réponses: 1
    Dernier message: 21/05/2010, 20h23
  3. Réponses: 5
    Dernier message: 01/12/2009, 01h06
  4. Réponses: 7
    Dernier message: 13/08/2009, 09h01
  5. Réponses: 5
    Dernier message: 02/01/2009, 10h37

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