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 :

libsdl-ttf -> segmentation fault


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut libsdl-ttf -> segmentation fault
    Bonjour à tous !

    J'ai débuté le C depuis peu (2 mois peut-être). Je suis en train de monté un jeu de tictactoe avec SDL... pour me familiarisé avec la base.... le jeu est presque fini mais quand jai voulu affichez du texte avec sdl_ttf... je n'ai jamais réussi.....

    Donc, jai essayer d'afficher du texte dans un nouveau programme avec seulement une boucle main.. sans autre fonction autre que pause().... le programme compile bien mais j'ai toujours une erreur de segmentation ... jai même tenté de compilé un code tout fait d'un ou 2 tutorial toujours sans succes... comme je tentait le tout sous le petit dernier de fedora... jai réessayer avec ma debian testing toujours sans success.... jai meme =recompiler la librairie voir si tout se passe bien et encore la... aucun succes. Par contre je n'ai pas essayer sous windows.

    Quelqu'un peut me confirmé si mon code est ok ou pas ??






    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
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
    #include "SDL/SDL_ttf.h"
    //#include <SDL/SDL_image.h>
     
     
    int main(int argc, char *argv[])
    {
        SDL_Surface *ecran = NULL;// *fond = NULL;
        SDL_Event event;
        int continuer = 1;
     
     
        SDL_Init(SDL_INIT_VIDEO);
        ecran = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE);
     
        SDL_WM_SetCaption("Gestion du texte avec SDL_ttf", NULL);
     
     
    SDL_version compile_version;
    const SDL_version *link_version=TTF_Linked_Version();
    SDL_TTF_VERSION(&compile_version);
    printf("compiled with SDL_ttf version: %d.%d.%d\n", 
            compile_version.major,
            compile_version.minor,
            compile_version.patch);
    printf("running with SDL_ttf version: %d.%d.%d\n", 
            link_version->major,
            link_version->minor,
            link_version->patch);
     
     
        /* Chargement de la police */
        SDL_Surface *texte = NULL;
        SDL_Rect position;
        TTF_Font *police = NULL;
        SDL_Color couleurNoire = {0, 0, 0};
     
        //TTF_Init();
     
        if(TTF_Init()==-1) {
    		printf("TTF_Init: %s\n", TTF_GetError());
    		exit(2);
        }
     
        police = TTF_OpenFont("TEAMSPIR.ttf", 35);
        /* Ecriture du texte dans la SDL_Surface "texte" en mode Blended (optimal) */
        texte = TTF_RenderText_Blended(police, "S", couleurNoire);
     
        while (continuer)
        {
            SDL_WaitEvent(&event);
            switch(event.type)
            {
                case SDL_QUIT:
                    continuer = 0;
                    break;
            }
     
            SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
     
            //     SDL_BlitSurface(fond, NULL, ecran, &position); /* Blit du fond */
     
            position.x = 60;
            position.y = 370;
            SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
            SDL_Flip(ecran);
        }
     
        TTF_CloseFont(police);
        TTF_Quit();
     
        SDL_FreeSurface(texte);
        SDL_Quit();
     
     
        return EXIT_SUCCESS;
    }

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 474
    Par défaut
    Tu oublies de vérifier la validité des pointeurs retournés par tes fonctions. C'est valable au moins pour « ecran », « police » et « texte ».

    Si TTF_OpenFont() ne peut ouvrir la fonte sélectionnée, elle va te renvoyer NULL. Et si tu utilises cette valeur telle quelle sans la contrôler, forcement, ça plantera tout de suite après.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 11
    Par défaut
    LOL Merci... J'aurais vraiment du y pensé... c'était si simple....

    J'ai ajouter des printf avec des TTF_GetError() et c'était vraiment un problème d'initialisation de ma police..

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

Discussions similaires

  1. Pb segmentation fault avec glutinit()
    Par pipistrelle dans le forum GLUT
    Réponses: 2
    Dernier message: 17/11/2004, 23h17
  2. [SDL_Image] Img_Load : segmentation fault ....
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 19/10/2004, 23h52
  3. [REDHAT] Segmentation fault systematique
    Par mela dans le forum RedHat / CentOS / Fedora
    Réponses: 2
    Dernier message: 21/09/2004, 06h05
  4. Réponses: 13
    Dernier message: 13/07/2004, 15h41
  5. Comment contrer la "segmentation fault" ?
    Par guillaume_pfr dans le forum C
    Réponses: 15
    Dernier message: 08/08/2003, 13h43

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