Partage
  • Partager sur Facebook
  • Partager sur Twitter

Segmentation Fault Mix_VolumeChunk

Sujet résolu
    18 septembre 2017 à 20:47:52

    Bonjour à tous,

    Je cherche une solution à mon problème et il semble que peu de gens l'aient eu et partagé la solution sur le net. Ou alors ils sont plus débrouillards que moi... :/

    En compilant un de mes programmes (Sous Ubuntu, grâce à la commande gcc dans un terminal), il m'est apparu une erreur de segmentation "classique" : Segmentation fault (core dumped). En le simplifiant (à l'extrême, mais je suis sur à 99,9% que ça ne change rien), puis en utilisant gdb sous l'interface ddd, il apparait clairement que Mix_VolumeChunk est le noeud (Program received signal SIGSEGV, Segmentation fault.  0xb7ed68eb in Mix_VolumeChunk () from /usr/lib/i386-linux-gnu/libSDL_mixer-1.2.so.0).

    J'ai recherché dans la doc' , où j'ai appris que le volume (le bon ?) était stocké dans maVariable->volume (si maVariable est un pointeur de Mix_Chunk). En essayant de le modifier directement dans mon code, je reçois la même erreur de segmentation.

    A savoir : dans le passé,ce même code fonctionnait...

    Merci d'avance à ceux qui vont répondre :-D

    #include <stdio.h>		// string.h pour les caractères, time.h pour les nombres aléatoires 
    #include <stdlib.h>		// math.h !! ne pas oublier de linker le gcc avec '-lm'
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include <SDL/SDL_ttf.h>
    #include <SDL/SDL_mixer.h>
    
    int main ()
    {
    	int o = 0;
    	SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO);
    	Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024);
    
    	malloc (sizeof (Mix_Chunk));
    	printf("I find it's nice !\n");
    	Mix_AllocateChannels(2);
    	Mix_Chunk *pianoa;
    	pianoa = Mix_LoadWAV("pianoa.wav");
    	//pianoa->volume = 100;
    	o = Mix_VolumeChunk(pianoa, MIX_MAX_VOLUME);
    	printf("%d\n",o);
    	Mix_PlayChannelTimed(1,pianoa, 1, 3000);
    	SDL_Delay(2000);
    	Mix_FreeChunk(pianoa);
    	Mix_CloseAudio();
    	SDL_Quit();
    
    	
    	return 0;
    }
    



    • Partager sur Facebook
    • Partager sur Twitter
      18 septembre 2017 à 20:57:44

      Yop,

      Je ne connais pas ces lib et l'erreur est peut-être évidente à la lecture, mais tu devrais peut-être commencer par vérifier les retours des fonctions (même si ça marche c'est une très bonne idée de le faire). Au fait le malloc() ligne 14 il sert à quoi ?

      • Partager sur Facebook
      • Partager sur Twitter
        18 septembre 2017 à 22:05:16

        Bonsoir,

        Contrôle le retour de Mix_loadWAV? (et des autres fonctions aussi bien entendu...)

        malloc inutile effectivement.

        • Partager sur Facebook
        • Partager sur Twitter
        ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
          18 septembre 2017 à 22:56:33

          Bonsoir,

          Tu peu utiliser la macro de SDL mixer : Mix_GetError() qui te renverra un tableau de char, soit une phrase ,décrivant la dernière erreur si il y en a une.

          -
          Edité par Warren79 18 septembre 2017 à 22:57:10

          • Partager sur Facebook
          • Partager sur Twitter

          Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

            19 septembre 2017 à 20:43:41

            Bonsoir (je suis original tiens),

            La macro ne donne rien, car l'erreur de segmentation stoppe mon programme avant la ligne qui contient la macro.

            Effectivement, le malloc est inutile (je l'avais mis là au cas ou l'erreur de segmentation serait due à une mauvaise allocation de mémoire.

            J'ai trouvé la solution... Je me suis bien *** sur ce coup là : en voulant applique la méthode proposée par briezhbugs (qui aurait marché), je m'apperçois, (j'en ai presque honte) que le fichier pianoa.WAV n'existait pas dans le fichier du programme :..( Du coup, aucune chance que Mix_LoadWAV retourne quelque chose ;-)

            Mais sinon j'ai toujours un "there is no soundcard" qui s'affiche, bien que le son se joue o^O (au fond,ça ne me dérange pas, mais c'est pour la forme)

            • Partager sur Facebook
            • Partager sur Twitter
              21 septembre 2017 à 18:17:36

              Bonjour,

              Justement, si 'pianoa.wav' n'existe pas et que tu essaies de l'ouvrir avec une fonction de la bibliothèque SDL_Mixer (ici Mix_LoadWAV() ) , la macro doit retourner quelque chose comme 'can't open sound file pianoa.wav' ou semblable. J'ai du mal à croire que la macro ne retourne rien dans ce cas là. :(

              Edit : ah oui , j'avais lu ton message trop rapidement : l'erreur de segmentation avant... désolé :-°

              -
              Edité par Warren79 21 septembre 2017 à 18:19:05

              • Partager sur Facebook
              • Partager sur Twitter

              Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

              Segmentation Fault Mix_VolumeChunk

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown