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 :

Erreur de Segmentation + GCC


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Points : 28
    Points
    28
    Par défaut Erreur de Segmentation + GCC
    Bonjour, ce soir on essayant de compiler une fonction main sous linux avec GCC, et qui marche bien sous windows j'ai eu une erreur de segmentation, j'ai cherché un peu partout en essayant de trouver cette erreur, mais ça ne donne rien, je vous montre mon main.

    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
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    #include <stdlib.h>
     
    #include <stdio.h>
     
    #include <SDL/SDL.h>
     
    #include <SDL/SDL_ttf.h>
     
    #include "user.h"
     
     
     
    int main(int argc, char *argv[])
     
    {
     
        SDL_Surface *ecran = NULL, *texte = NULL, *fond = NULL, *texte2 = NULL, *texte3 = NULL, *rectangle = NULL;
     
        rectangle = SDL_CreateRGBSurface(SDL_HWSURFACE, 200, 100, 32, 0, 0, 0, 0);
     
     
     
        SDL_Rect position;
     
        SDL_Event event;
     
        TTF_Font *police = NULL, *police2= NULL;
     
        SDL_Color couleurMov = {111, 32, 211};
     
        SDL_Color couleurStart = {248, 248, 25};
     
        SDL_Color couleurNoire = {0,0,0};
     
     
     
        int continuer = 1;
     
     
     
     
     
        putenv("SDL_VIDEO_WINDOW_POS=center");
     
        SDL_Init(SDL_INIT_VIDEO);
     
        TTF_Init();
     
     
     
        ecran = SDL_SetVideoMode(760, 532, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
     
        SDL_WM_SetCaption("BOMBERMAN", NULL);
     
     
     
        fond = SDL_LoadBMP("bomber.bmp");
     
        /* Chargement de la police */
     
        police2 = TTF_OpenFont("Andrew.ttf", 20);
     
        police = TTF_OpenFont("BURNSTOW.ttf", 100);
     
        /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
     
        texte = TTF_RenderText_Blended(police, "BOMBERMAN", couleurMov);
     
        texte2 = TTF_RenderText_Blended(police2, "Press any key to start", couleurStart);
     
        /*texte3 = TTF_RenderText_Blended(police2, "Press any key to start", couleurNoire);*/
     
     
     
     
     
        /* SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));*/
     
     
     
            position.x = 0;
     
            position.y = 0;
     
            SDL_BlitSurface(fond, NULL, ecran, &position); /* Blit du fond */
     
            SDL_Flip(ecran);
     
            position.x = 120; /* position du texte Bomberman */
     
            position.y = 350;
     
            SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
     
            SDL_FillRect(rectangle, NULL, SDL_MapRGB(ecran->format, 0, 0, 0));
     
    	/* _sleep(400);*/
     
            SDL_Flip(ecran);
     
    	/* _sleep(1000);*/
     
    	position.x = 285; /* position de press any key */
     
            position.y = 470;
     
            SDL_BlitSurface(texte2, NULL, ecran, &position); /* Blit du texte par-dessus */
     
            SDL_Flip(ecran);
     
     
     
     
     
     
     
    while (continuer)
     
        {
     
     
     
            SDL_WaitEvent(&event);
     
            switch(event.type)
     
            {
     
                case SDL_QUIT:
     
                    continuer = 0;
     
                    break;
     
                case SDL_KEYDOWN: /* Si appui d'une touche */
     
    	      /*user(ecran);*/
     
                break;
     
     
     
            }
     
     
     
        }
     
     
     
        TTF_CloseFont(police);
     
        TTF_CloseFont(police2);
     
        TTF_Quit();
     
        SDL_FreeSurface(texte);
     
        SDL_FreeSurface(rectangle);
     
        SDL_Quit();
     
        return EXIT_SUCCESS;
     
    }


    En compilant ça m'affiche :

    yassine@yassine-desktop:~/Bureau/Projet$ g++ -o my_prog main.c -lSDLmain -lSDL -lSDL_ttf
    main.c: In function ‘int main(int, char**)’:
    main.c:22: warning: deprecated conversion from string constant to ‘char*’


    et en l'executant j'ai :

    yassine@yassine-desktop:~/Bureau/Projet$ ./my_prog
    Erreur de segmentation


    Merci beaucoup

  2. #2
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Ce n'est pas la peine de upper ton topic, si personne ne répond, c'est que personne ne sait ou que les gens qui peuvent te répondre ne sont pas encore passées par là.

    Enlève -lSDLmain de tes options de compilation, je pense que ça devrait faire l'affaire.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Je viens d'essayer, ça donne toujours la meme chose, j'ai essayé avec GCC et G++ ça donne erreur de segmentation, meme en compilant avec codbloks sous linux, mais sous windows il marche sans probleme.

    Merci encore

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 410
    Points : 23 809
    Points
    23 809
    Par défaut
    Citation Envoyé par autregalaxie Voir le message
    … je vous montre mon main :

    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
    #include <SDL/SDL_ttf.h>
     
    …
     
     
    int main(int argc, char *argv[])
    {
        …
     
    062      police2 = TTF_OpenFont("Andrew.ttf", 20);
    064      police = TTF_OpenFont("BURNSTOW.ttf", 100);
     
    066      /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
     
    068      texte = TTF_RenderText_Blended(police, "BOMBERMAN", couleurMov);
    070      texte2 = TTF_RenderText_Blended(police2, "Press any key to start", couleurStart);
     
        …
    166  }
    Tu ne vérifies pas si TTF_OpenFont() réussit ou échoue. Sur ma machine (Fedora 9), C'est la ligne 68 qui plante parce que le pointeur « police » est NULL. Et pour cause : les fontes Andrew.ttf et BURNSTOW.ttf ne sont pas disponibles sur ma machine.

  5. #5
    Membre actif Avatar de ironzorg
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 288
    Points : 245
    Points
    245
    Par défaut
    Je dirais plus generalement que tu ne testes aucun retour:

    -rectangle
    -SDL_Init
    -TTF_Init
    -ecran
    -fond
    -police
    -police2
    -texte
    -texte2

    Teste tout ca et tu auras le minimum syndical pour definir si le probleme vient de ton code (celui que tu as concu) ou de celui que tu utilises (SDL).

Discussions similaires

  1. Optimisation dans gcc -> erreur de segmentation
    Par nuwanda03 dans le forum C
    Réponses: 7
    Dernier message: 28/05/2013, 01h53
  2. Gcc scanf et erreur de segmentation
    Par titor dans le forum C
    Réponses: 1
    Dernier message: 27/10/2005, 20h27
  3. Erreur de segmentation (Inconnue)
    Par Dark-Meteor dans le forum C
    Réponses: 5
    Dernier message: 08/09/2005, 14h42
  4. [Dev-C++] Erreur de segmentation...
    Par sas dans le forum Dev-C++
    Réponses: 11
    Dernier message: 26/03/2005, 15h25
  5. erreur de segmentation
    Par transistor49 dans le forum C++
    Réponses: 10
    Dernier message: 15/03/2005, 12h18

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