[SDL_TTF] Segmentation Fault RenderText [RÉSOLU]

Ce qui ne concerne ni le forum ni des problèmes
aminnairi
archer de cavalerie
Messages : 186
Inscription : lun. 10 août 2015, 13:50
Localisation : France
Contact :

[SDL_TTF] Segmentation Fault RenderText [RÉSOLU]

Message par aminnairi » ven. 24 juin 2016, 16:32

Bonjour tout le monde,

Je fais des test sur la première version de la librairie SDL, plus particulièrement sur les TTF.

J'ai une erreur de segmentation que je n'arrive pas à déboguer dans mon code.

main.c :

Code : Tout sélectionner

// Inclusions

#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
#include <SDL/SDL_ttf.h>

// Prototypes

void echec(const char* texte);
void succes(const char* texte);

// Fonction principale

int main(void) {

	// Variables

	SDL_Surface *ecran = NULL,
				*texte = NULL;

	SDL_Event event;

	SDL_Rect position;

	SDL_Color noir = {0, 0, 0};

	TTF_Font *police = NULL;

	int continuer = 1;

	// Instructions

	SDL_Init(SDL_INIT_VIDEO) == -1 ? echec("Video") : succes("Video");

	TTF_Init() == -1 ? echec("TTF") : succes("TTF");

	SDL_WM_SetIcon(IMG_Load("icone"), NULL);

	SDL_WM_SetCaption("Gestion du texte avec TTF", NULL);

	!(ecran = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF)) ? echec("Ecran") : succes("Ecran");

	police = TTF_OpenFont("angelina.ttf", 65);

	texte = TTF_RenderText_Solid(police, "Test", noir);

	while(continuer) {

		SDL_WaitEvent(&event);

		switch(event.type) {

			case SDL_KEYDOWN:

				switch(event.key.keysym.sym) {

					case SDLK_ESCAPE:

						continuer = 0;
					
						break;
				}
			break;

			case SDL_QUIT:
				
				continuer = 0;
				
				break;
		}

		position.x = ecran->w / 2;
		position.y = ecran->h / 2;

		SDL_BlitSurface(texte, NULL, ecran, &position);

		SDL_Flip(ecran);
	}

	TTF_CloseFont(police);

	TTF_Quit();

	SDL_FreeSurface(ecran);
	SDL_FreeSurface(texte);

	SDL_Quit();

	return EXIT_SUCCESS;
}

// Fonctions

void echec(const char* texte) {

	fprintf(stderr, "%s : %s\n", texte, SDL_GetError());

	SDL_Quit();

	TTF_Quit();

	exit(EXIT_FAILURE);
}

void succes(const char* texte) {

	fprintf(stderr, "%s : ok\n", texte);
}
Ce que je tape pour compiler :

Code : Tout sélectionner

clang -std=c11 -lSDL -lSDL_ttf -lSDL_image -o main *.c && ./main
Ce que j'obtiens :

Code : Tout sélectionner

main.c:57:12: warning: 232 enumeration values not handled in switch: 'SDLK_UNKNOWN', 'SDLK_BACKSPACE', 'SDLK_TAB'... [-Wswitch]
                                switch(event.key.keysym.sym) {
                                       ^
1 warning generated.
Video : ok
TTF : ok
Ecran : ok
Erreur de segmentation (core dumped)
A priori ça a l'air d'être la ligne contenant la variable texte. Si je dé-commente cette ligne, tout marche impeccable (mais sans texte du coup). Est-ce que ça serait la fonction elle-même ou c'est moi qui ai oublié quelque chose ?
Dernière édition par aminnairi le ven. 24 juin 2016, 17:40, édité 1 fois.
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM

Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 14916
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [SDL_TTF] Segmentation Fault RenderText

Message par benjarobin » ven. 24 juin 2016, 17:06

Bonjour,
Je vais déplacer le sujet dans une autre section car cela n'a strictement rien à voir avec Arch linux.
Pour déboguer tu as gdb, et des IDE qui fournissent une interface graphique à gdb...
Bref, ton erreur est sûrement au niveau de TTF_OpenFont() qui échoue et retourne NULL
Zsh | KDE | PC fixe : core i7, carte nvidia | Portable : Asus ul80vt
Titre d'un sujet : [Thème] Sujet (état)

aminnairi
archer de cavalerie
Messages : 186
Inscription : lun. 10 août 2015, 13:50
Localisation : France
Contact :

Re: [SDL_TTF] Segmentation Fault RenderText

Message par aminnairi » ven. 24 juin 2016, 17:39

Oui merci, j'ai créé une fonction pour analyser le TTF_GetError selon la documentation et je me suis rendu compte que c'était en fait le nom littéral de mon fichier .TTF... Shame... Shame...
Arch Linux x86_64 UEFI
7,3 Gio RAM
Intel® Core™ i5-4200U CPU @ 1.60GHz × 4
Intel® Haswell Mobile + NVIDIA GeForce 840M 2 Gio vRAM
KDE Plasma + SDDM

Répondre