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

SDL Discussion :

Violation d'accès lors de la lecture


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Violation d'accès lors de la lecture
    Salut a tous,

    j'ai un problème avec ce code lorsque je l'exécute, parfois ça fonctionne, mais des-fois j'ai l'erreur : "Exception non gérée à 0x00e83f8a dans sdlTest.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000004"

    Voici le code :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <stdlib.h>
    #include <stdio.h>
    #include <sdl/SDL.h>
    #include <time.h>
     
    void pause();
     
    int main(int argc, char *argv[])
    {
    	int i;
        SDL_Surface *ecran = NULL, *image = NULL;
    	SDL_Rect position;
     
        SDL_Init(SDL_INIT_VIDEO); // Initialisation de la SDL
     
        ecran = SDL_SetVideoMode(800, 480, 32, SDL_HWSURFACE); // Ouverture de la fenêtre
        SDL_WM_SetCaption("Ma fenetre SDL", NULL);
     
        // Coloration de la surface ecran en bleu-vert
        SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));
    	srand(time(NULL));
    	i = (rand()%6);
    	position.x = 0; 
    	position.y = 0;
    	/* Chargement d'une image Bitmap dans une surface */
    	switch(i)
    	{
    	case 1:
    		printf("omg");
    		image = SDL_LoadBMP("jeton1.bmp"); //ok
    		position.x = 0; 
    		position.y = 0;
    		break;
    	case 2:
    		image = SDL_LoadBMP("jeton5.bmp"); //ok
    		position.x = 0; 
    		position.y = 0;
    		break;
    	case 3:
    		image = SDL_LoadBMP("jeton10.bmp"); //ok
    		position.x = 0; 
    		position.y = 0;
    		break;
    	case 4:
    		image = SDL_LoadBMP("jeton20.bmp"); //ok
    		position.x = 0; 
    		position.y = 0;
    		break;
    	case 5:
    		image = SDL_LoadBMP("jeton100.bmp"); //ok
    		position.x = 0; 
    		position.y = 0;
    		break;
    	}	
    	SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(image->format, 255, 0, 255));
        SDL_BlitSurface(image, NULL, ecran, &position); // Collage de la surface sur l'écran
     
        SDL_Flip(ecran); /* Mise à jour de l'écran avec sa nouvelle couleur */
     
        pause(); // Mise en pause du programme
     
    	SDL_FreeSurface(image); // Libération de la surface
        SDL_Quit(); // Arrêt de la SDL
     
        return EXIT_SUCCESS; // Fermeture du programme
    }
     
    void pause()
    {
        int continuer = 1;
        SDL_Event event;
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
            }
        }
    }
    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut
    Bonjour,

    Tout d'abord tu ne vérifie jamais le retour des fonction "à risque" ( comprendre par là les fonctions qui peuvent potentiellement échouer, comme SDL_LoadBMP ). Une simple gestion d'erreur te permettra surement de résoudre ton problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    image = SDL_LoadBMP( "jeton20.bmp" );
    if ( image == NULL ) {
        fprintf( stderr, "%s\n", SDL_GetError() );
        return EXIT_FAILURE;
    }
    Sinon à vue de nez, je dirais qu'un des chemin que tu spécifie pour le chargement des bitmaps n'est pas correct, ce qui entraine le fait que le pointeur "image" vaut NULL, qui provoque à son tour un SegFault. L'erreur n'arrive pas à tous les coups car l'image à charger est choisie de manière aléatoire.

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. Réponses: 5
    Dernier message: 01/12/2009, 01h06
  3. Réponses: 7
    Dernier message: 13/08/2009, 09h01
  4. Réponses: 5
    Dernier message: 02/01/2009, 10h37
  5. Violation d'accès lors de la lecture
    Par Fullmetal82 dans le forum C++
    Réponses: 9
    Dernier message: 29/11/2007, 17h13

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