Bonjour, alors je ne sais pas pourquoi, j'ai mon play et mon getDuration qui segfault PARFOIS.
j'utilise les même méthodes statiques dans mon programme, mais le problème se retrouve dans une boucle simple:
Sound.cpp:
#include "Sound.hpp"
#include "Assets.hpp"
static int _m;
static std::vector<sf::Music*> _music;
bool Sound::load()
{
for (int i = 0; i < 4; i++)
{
std::stringstream ss;
ss << "res/sound/music/" << i + 1 << ".wav";
sf::Music *music = new sf::Music();
if (!music->openFromFile(ss.str()))
{
std::cout << "cannot load " << ss.str() << std::endl;
return (false);
}
music->setVolume(50);
music->setLoop(true);
_music.push_back(music);
//Assets::add_load();
}
_m = 0;
_music[_m]->play();
return (true);
}
bool Sound::swap(const int &next)
{
if (Config::get_bool("sound") && _music[next] != NULL && _m != next)
{
if (_music[next]->getDuration() >= _music[_m]->getPlayingOffset())
_music[next]->setPlayingOffset(_music[_m]->getPlayingOffset());
_music[_m]->stop();
_music[next]->play();
_m = next;
return (true);
}
return (false);
}
le Sound.hpp:
#ifndef SOUND_H_
# define SOUND_H_
# include <SFML/Audio.hpp>
# include <iostream>
# include <sstream>
# include <string>
# include <dirent.h>
# include <vector>
# include "Config.hpp"
class Sound
{
public:
static bool swap(const int &m);
static bool load();
};
#endif /*!SOUND_H_*/
donc voilà, j'appelle évidemment Sound::load() au début du programme, et lorsque je fais appel à Sound::swap(), j'ai environ une foi sur 10 un segfault.
gdb me sort:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7573360 in sf::Music::getDuration() const () from lib/64/libsfml-audio.so.2
ou bien la même avec Play() ou Stop().
c'est probablement une erreur toute conne mais je n'arrive pas à mettre le doigt dessus.
merci beaucoup d'avoir pris le temps de lire ce bout de code et merci d'avance pour vos (éventuelles) réponses.
bonne journée