Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

1

13.05.2013, 14:05

[SFML] Unbehandelte Ausnahme bei 0x005353cc

Erstmal entschuldige ich mich dafür, dass ich einen neuen Thread über dasselbe Thema erstelle, aber es ist wirklich ein ständiges Problem.
Ich hab nochmal von Vorne mit C++ und SFML angefangen, weil ich dachte, dass das Problem an meinem schlechten Programmierstil liegt :D ... Jetzt hab ich ein neues Programm angefangen, bei dem ich alles so wie in Tutorials usw. gemacht hab. Ein bisschen hab ich auch improvisiert, weshalb da evtl. schon ein Fehler drin sein könnte. Das Programm an sich läuft ganz normal, bis ich den Sound einfüge. Ab dann kommt beim Schließen (das Fenster schließt sich ganz normal, Konsole bleibt aber offen) eine Fehlermeldung, die lautet:

Unbehandelte Ausnahme bei 0x005353cc in SpriteSheet Animation.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x01d3e6b0.

Ich hab gegoogelt und auch selbst am Programm viel getestet, aber solange irgendetwas drin ist, was mit dem Sound zu tun hat, kommt immer diese Fehlermeldung am Ende und die Konsole reagiert nicht. Achja, es öffnet sich nebenbei in der Leiste neben main.cpp "free.c", dort ist ein grüner Pfeil, der auf diesen Codeabschnitt in free.c zeigt:

C-/C++-Quelltext

1
2
3
4
5
retval = HeapFree(_crtheap, 0, pBlock);
        if (retval == 0)
        {
            errno = _get_errno_from_oserr(GetLastError());
        }


C-/C++-Quelltext

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
int main()
{
    /////Sprite/////
    enum direction {Down, Left, Right, Up};
    sf::Vector2i source(1, Down);

    sf::Vector2i gsource(1, Down);

    sf::Texture tplayer;
    tplayer.loadFromFile("Sprites/player.png");
    sf::Sprite player(tplayer);
    player.setPosition(360,250);
    player.setOrigin(16,16);

    sf::Texture tghost;
    tghost.loadFromFile("Sprites/Ghost.png");
    sf::Sprite ghost(tghost);
    ghost.setPosition(417,15);

    sf::Texture tbackground;
    tbackground.loadFromFile("Sprites/Town.png");
    sf::Sprite background(tbackground);
    background.setScale(2.087,1.873);
    background.setPosition(400,300);
    background.setOrigin((tbackground.getSize().x / 2),(tbackground.getSize().y / 2));

    /////Music and Sound/////
    sf::Music backgroundmusic;
    backgroundmusic.openFromFile("Music and Sound/Pokemon_Theme.ogg");
    backgroundmusic.setVolume(50);
    backgroundmusic.setLoop(true);
    backgroundmusic.play();

    //Zeit
    sf::Clock clock;
    sf::Time time = clock.restart();
    sf::Clock animationclockplayer;
    sf::Time animationtimeplayer = animationclockplayer.restart();
    sf::Time animationtime2 = sf::milliseconds(200);
    sf::Clock animationclockghost;
    sf::Time animationtimeghost = animationclockghost.restart();
    sf::Time animationtime3 = sf::milliseconds(100);

    ////////////////////////////////Runtime-Loop////////////////////////////////////
    sf::RenderWindow Window(sf::VideoMode(800,600), "Pokémon 2.0", sf::Style::Close);
    while(Window.isOpen())
    {
        //time
        animationtimeplayer = animationclockplayer.getElapsedTime();
        animationtimeghost = animationclockghost.getElapsedTime();
        time = clock.getElapsedTime();
        //Event-Loop
        sf::Event Event;
        while (Window.pollEvent(Event))
        {
            switch (Event.type)
            {
            case sf::Event::Closed:
                Window.close();
                break;
            case sf::Event::KeyPressed:
                if (Event.key.code == sf::Keyboard::Escape)
                    Window.close();
                break;
            }
        }
        
        /////Controls player/////
        if (sf::Keyboard::isKeyPressed)
            clock.restart();

        if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
        {
            source.y = Down;
            player.move(0,0.1 * time.asMilliseconds());
        }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
        {
            source.y = Left;
            player.move(-0.1 * time.asMilliseconds(),0);
        }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
        {
            source.y = Right;
            player.move(0.1 * time.asMilliseconds(),0);
        }
        else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
        {
            source.y = Up;
            player.move(0,-0.1 * time.asMilliseconds());
        }
        
        /////Kollisionen/////
        //outline
        if (player.getPosition().y < 46) //down
            player.move(0,0.1 * time.asMilliseconds());
        else if (player.getPosition().x > 725) //left
            player.move(-0.1 * time.asMilliseconds(),0);
        else if (player.getPosition().x < 75) //right
            player.move(0.1 * time.asMilliseconds(),0);
        else if (player.getPosition().y > 555) //up
            player.move(0,-0.1 * time.asMilliseconds());

        //Animation player 
        if (animationtimeplayer > animationtime2)
        {
        source.x++;
        animationclockplayer.restart();
        }
        if(source.x * 32 >= tplayer.getSize().x)
            source.x = 0;

        //Animation ghost
        if (animationtimeghost > animationtime3)
        {
        gsource.x++;
        animationclockghost.restart();
        if(gsource.x * 32 >= tghost.getSize().x)
            gsource.x = 0;
        }

        /////Display/////
        player.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
        ghost.setTextureRect(sf::IntRect(gsource.x * 32, gsource.y * 32, 32, 32));
        Window.clear();
        Window.draw(background);
        Window.draw(ghost);
        Window.draw(player);
        Window.display();
    }
    
    return 0;
}


Und, einige werden wissen, was ich damit meine, ich werde diesmal mehr auf Antworten eingehen :D

/Edit

Und was genau ist mit Callstack gemeint, ich würde ihn dann auch hier reinstellen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

13.05.2013, 14:25

Beim laden der Assets (Grafiken, Sounds und so weiter) mal die Rückgabe überprüfen. Die Funktionen geben dir etwas zurück. Damit kannst du prüfen ob das laden erfolgreich war. Guck dir das ganze mal in der SFML Doku an. Vermutlich wird da etwas nicht richtig geladen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

3

13.05.2013, 14:31

Ich hab das schon überprüft. Die Grafiken und Sounds funktionieren auch im Spiel, das Beenden funktioniert nur nicht richtig. Ich hab auch alles so wie in der Doku beschrieben gemacht.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

13.05.2013, 14:44

Mach bitte folgendes. Aus:

C-/C++-Quelltext

1
tplayer.loadFromFile("Sprites/player.png");

machst du:

C-/C++-Quelltext

1
2
3
4
if( ! tplayer.loadFromFile("Sprites/player.png")) // wenn nicht geladen werden kann
{
    return 1; // Fehler
}

Das selbe machst du bei jedem loadFromFile. Bricht dein Programm jetzt frühzeitig ab? Dein Fehler ist eine Speicherverletzung. Deshalb glaube ich dass da irgendwas nicht passt. Möglicherweise handelt es sich auch um einen Folgefehler. Das ist bei C++ schon mal so eine Sache. Ansonsten kann ich noch ins blaue raten und sagen, du musst den Sound beenden bevor du das Fenster schließen darfst. Normal würde ich sagen macht SFML das für dich aber wer weiß. Einen Versuch ist es wert. Ansonsten bin ich überfragt da ich kaum bis gar nicht mehr mit C++ arbeite und von SFML auch wenig bis keine Erfahrung habe.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

5

13.05.2013, 14:56

Ich hab das so gemacht, wie du geschrieben hast. Das Programm bricht nicht ab. Vorher hab ich das Selbe gemacht, nur dass im Falle, sollte es nicht geladen werden, die Konsole was couted. Den Sound zu stoppen, bevor das Programm endet, funktioniert leider auch nicht. Schade.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

13.05.2013, 15:01

Und was sagt der Stacktrace woher die Exception kommt? Also aus welchen Klassen und Methoden?

Übrigens würde ich erst das Window erzeugen und danach die Texturen. Nicht andersrum.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

7

13.05.2013, 15:03

Und was sagt der Stacktrace woher die Exception kommt? Also aus welchen Klassen und Methoden?
Könntest du mir das bitte genauer erklären? Wo schaue ich das nach?

/Edit
Vielleicht das hier?

"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\Debug\SpriteSheet Animation.exe" geladen, Symbole wurden geladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\ntdll.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\kernel32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\sfml-graphics-d-2.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\sfml-window-d-2.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\sfml-system-d-2.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msvcr100d.dll" geladen, Symbole wurden geladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msvcp100d.dll" geladen, Symbole wurden geladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\opengl32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msvcrt.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\advapi32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\rpcrt4.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\secur32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\gdi32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\user32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\glu32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\ddraw.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\dciman32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\winmm.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\sfml-audio-d-2.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\openal32.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\shell32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\shlwapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\Dokumente und Einstellungen\denis\Eigene Dateien\Visual Studio 2010\Projects\SpriteSheet Animation\SpriteSheet Animation\libsndfile-1.dll" geladen, Die Binärdaten wurden nicht mit Debuginformationen erstellt.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\imm32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.6028_x-ww_61e65202\comctl32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\comctl32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\MSCTF.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\version.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\version.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\MSCTFIME.IME" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\ole32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\nvoglnt.dll" geladen, Cannot find or open the PDB file
Der Thread 'Win32-Thread' (0x238) hat mit Code 0 (0x0) geendet.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\mcd32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\mcd32.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\dsound.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\version.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\wdmaud.drv" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\wintrust.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\crypt32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msasn1.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\imagehlp.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msacm32.drv" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\msacm32.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\midimap.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" entladen.
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\ksuser.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\dinput.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\hid.dll" geladen, Cannot find or open the PDB file
"SpriteSheet Animation.exe": "C:\WINDOWS\system32\setupapi.dll" geladen, Cannot find or open the PDB file
Der Thread 'Win32-Thread' (0x59c) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0x960) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0xd98) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0x414) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0x898) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0xbb0) hat mit Code 0 (0x0) geendet.
Der Thread 'Win32-Thread' (0xbc) hat mit Code 0 (0x0) geendet.
Eine Ausnahme (erste Chance) bei 0x005353cc in SpriteSheet Animation.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x01d3e6b0.
Unbehandelte Ausnahme bei 0x005353cc in SpriteSheet Animation.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x01d3e6b0.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

13.05.2013, 15:05

Im Fenster "Call Hierarchy"
Am besten mal einen Screenshot davon machen. Wenn es nicht offen ist, das findet sich im Menü unter "Debug -> Windows".

Und wie gesagt: Ich würde erst das Window erzeugen und danach die Texturen. Nicht andersrum.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

SwatzZ

Treue Seele

  • »SwatzZ« ist der Autor dieses Themas

Beiträge: 119

Beruf: Gymnasist (10. Klasse)

  • Private Nachricht senden

9

13.05.2013, 15:16

Ich bekomme die Datei hier nicht hochgeladen (PHP-Limit).
Ich hab es eben auf mediafire.com gemacht: http://www.mediafire.com/view/?6715n7svn20uy8t

/Edit:

Und ich hab jetzt auch die Texturen und Sounds nach dem Fenster implementiert.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

13.05.2013, 15:28

Es ist also definitiv ein Problem mit der Musik. Ich vermute da wird der Buffer durch den Destruktor gekillt bevor der Musik-Thread aufgehört hat, sodass der dann lesend auf freigegebenen Speicher zugreift.
Und Du bist sicher, dass "stop" auf die Musik vor dem Beenden das Problem nicht behebt?

Edit:
Es gibt übrigens einen Beitrag dazu im SFML-Forum:
http://en.sfml-dev.org/forums/index.php?topic=7741.0

Könnte durchaus ein SFML-Bug sein. Den kannst Du ja gern mal anschubsen gehen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige