Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[SFML 2.0] Odtwarzanie dźwięku - błąd przy wyjściu z aplikacji

Ostatnio zmodyfikowano 2013-07-25 15:35
Autor Wiadomość
Wicon
Temat założony przez niniejszego użytkownika
[SFML 2.0] Odtwarzanie dźwięku - błąd przy wyjściu z aplikacji
» 2013-07-24 17:06:08
Witam. Mam problem z dźwiękiem we wspomnianej bibliotece. Skorzystałem oczywiście z dokumentacji i dopisałem do programu kilka linijek kody, żeby sprawdzić jak będzie działać. Oto kod:

C/C++
int main()
{
    //tu ładuję dźwięk
    SoundBuffer PlantsEat;
    PlantsEat.loadFromFile( "C://Wicon/Programy/MyGame/MyGame/Debug/_Work/Data/Sounds/Effects/Plants_Eat.wav" );
    Sound Eat_Plants; Eat_Plants.setBuffer( PlantsEat );
    Eat_Plants.setLoop( false );
    while( oknoAplikacji.isOpen() )
    {
        while( oknoAplikacji.pollEvent( zdarzenie ) )
        {
            // odtwarzanie dźwięku jest w pętli obsługującej zdarzenia, gdyż mam potrzebę sprawdzić,
            // czy postać użyła akurat przedmiotu będącego rośliną
            Eat_Plants.play();
        };
    };
};

No i teraz, sam nie wiem, czy informacja którą dostaję to błąd czy jaka cholera, zważywszy na to, co jest tam napisane. Otóż, program działa sprawnie, ale gdy z niego wychodzę (tylko gdy program jest odpalony z programu visual C++) pokazuje się coś takiego:

Unhandled exception at 0x77bf15de in MyGame.exe: 0xC0000005: Access violation reading location 0xfeeefeee.

a następnie coś takiego:

Unhandled exception at 0x77bf15de in MyGame.exe: 0x00000000: Operacja ukończona pomyślnie.
I muszę debugowanie kończyć ręcznie.

No ja się cieszę, że ukończono pomyślnie ale kaj mnie to obchodzi.
Gdy uruchamiam program normalnie z pliku exe, wtedy nic się oczywiście nie pojawia, czyli w zasadzie jest dobrze, ale będzie mi to przeszkadzać podczas dalszej budowy programu. Problem na pewno dotyczy dźwięku, bo gdy usunę część kodu odpowiedzialną za niego to problem znika.

EDIT: Aha, problem nie jest z odtwarzaniem. Jak usunę Play to problem występuje nadal.
P-88677
RazzorFlame
» 2013-07-24 17:36:30
Człowieku, jakie debugowanie? Włącz lepiej ten debugger. Jak na razie to po prostu uruchamiasz program z poziomu IDE. Włącz ten debuger i powiedz na którą linijke wskazuje.
P-88678
Wicon
Temat założony przez niniejszego użytkownika
» 2013-07-24 18:01:05
Nie wskazuje żadnej linii. Eh.. chyba będzie prościej zrobić screena. Takie coś pojawia się, gdy wyłączę grę, jeśli jest uruchomiona z Visuala:
http://www1.zippyshare.com/v​/95565409/file.html

Chciałbym nieco upnąć posta i dodać kilka informacji dotyczących błędu. Zapewne jest on związany z biblioteką <SFML/Audio.hpp>. Gdy próbuję użyć czegokolwiek z tej biblioteki, to pokazuje się informacja ze screena do którego link jest wyżej. Gdy nacisnę break wywala mnie do pliku crt0dat.c i do takiego kodu:
C/C++
{
    __crtCorExitProcess( status );
   
    /*
             * Either mscoree.dll isn't loaded,
             * or CorExitProcess isn't exported from mscoree.dll,
             * or CorExitProcess returned (should never happen).
             * Just call ExitProcess.
             */
   
    ExitProcess( status );
}
z lewej strony jest zielona strzałeczka wskazująca na ostatnią linię (tą z klamrą)
Gdy nacisne continue wywala mnie do  następnego pliku: tidtable.c i do takiego kodu:
C/C++
_ptiddata __cdecl _getptd_noexit(
void
)
{
    _ptiddata ptd;
    DWORD TL_LastError;
   
    TL_LastError = GetLastError();
   
    #ifdef _M_IX86
   
    /*
         * Initialize FlsGetValue function pointer in TLS by calling __set_flsgetvalue()
         */
   
    if(( ptd =( __set_flsgetvalue() )( __flsindex ) ) == NULL ) {
        #else  /* _M_IX86 */
        if(( ptd = FLS_GETVALUE( __flsindex ) ) == NULL ) {
            #endif  /* _M_IX86 */
            /*
                     * no per-thread data structure for this thread. try to create
                     * one.
                     */
            #ifdef _DEBUG
            extern void * __cdecl _calloc_dbg_impl( size_t, size_t, int, const char *, int, int * );
            if(( ptd = _calloc_dbg_impl( 1, sizeof( struct _tiddata ), _CRT_BLOCK, __FILE__, __LINE__, NULL ) ) != NULL ) {
                #else  /* _DEBUG */
                if(( ptd = _calloc_crt( 1, sizeof( struct _tiddata ) ) ) != NULL ) {
                    #endif  /* _DEBUG */
                   
                    if( FLS_SETVALUE( __flsindex,( LPVOID ) ptd ) ) {
                       
                        /*
                                         * Initialize of per-thread data
                                         */
                       
                        _initptd( ptd, NULL );
                       
                        ptd->_tid = GetCurrentThreadId();
                        ptd->_thandle =( uintptr_t )( - 1 );
                    }
                    else {
                       
                        /*
                                         * Return NULL to indicate failure
                                         */
                       
                        _free_crt( ptd );
                        ptd = NULL;
                    }
                }
            }
           
            SetLastError( TL_LastError );
           
            return( ptd );
        }

Tutaj zielona strzałeczka wskazuje na linię return.
Nie mam kompletnie zielonego pojęcia o co chodzi. Wyskakuje to w momencie gdy wyjdę z programu. Samo odtwarzanie muzyki, dźwięków działa poprawnie i nie ma problemów w czasie działania programu. Błąd wyskakuje, gdy wcisnę wyjście z gry i zakończę działanie programu. Gdy uruchomię program z exe, działa on bez zarzutu, tak jak powinien. Jednak ten błąd będzie dla mnie uciążliwy podczas dalszego ulepszania kodu. Sprawdzałem, czy biblioteki są zainstalowane poprawnie. Musza być, skoro dźwięk się odtwarza.
Proszę, pomóżcie. Sporo już się naharowałem przy swoim programie i nie chce się poddawać, ale wciąż się uczę dlatego proszę was o pomoc.
P-88679
Mrovqa
» 2013-07-25 14:00:53
P-88745
Wicon
Temat założony przez niniejszego użytkownika
» 2013-07-25 14:05:57
Już wcześniej trafiłem na tą stronę, ale co ja mam zrobić z tą częścią kodu? Usunąć ją?
Link (który tam jest) do tego francuskiego forum jest już nieaktywny.
P-88746
Mrovqa
» 2013-07-25 15:35:25
Masz dwa wyjścia: porzucić część SFMLa, który powoduje ten bug (odpada) albo naprawić go. Możesz poszukać czegoś w Internecie albo samemu zacząć działać - w komentarzu masz napisane, co jest nie tak:
Q> Laurent can you explain a bit more on "Ok, I know what's wrong", so we can have a look and maybe submit a patch at some point ? I'm also running into this issue.
A> Yeah, it's simple: the AudioDevice instance is destroyed at global exit.
P-88756
« 1 »
  Strona 1 z 1