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

Gelöschter Benutzer

unregistriert

1

24.08.2012, 11:54

SFML: Pufferüberlauf bei LoadFromFile

Guten Morgen,
ich arbeite zurzeit mit der SFML. Sobald ich aber LoadFromFile benutze, meldet der Debugger einen Pufferüberlauf bzw. in der Konsole erscheint viel Text und anschließend hängt sich das Programm auf.

Ich habe folgenden Code (auf's wesentliche reduziert):

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
#include <iostream>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
using namespace std;

int main()
{
    sf::RenderWindow window (sf::VideoMode(800, 600), "Bubbly");
    
    sf::Image* pImage = new sf::Image;
    if (!pImage->LoadFromFile("cannon.png"))
    {
        cout << "Fehler beim Laden!" << endl;
        return EXIT_FAILURE;
    }

    while (window.IsOpened())
    {
        sf::Event event;
        while (window.GetEvent(event))
        {
            if (event.Type == sf::Event::Closed)
                window.Close();
        }

        window.Clear();
        
        window.Display();
    }

    delete pImage;

    return EXIT_SUCCESS;
}


Bis zur Spielschleife kommt das Programm gar nicht mehr.

Die Konsole sieht folgendermaßen aus:

(Link)


lg

2

24.08.2012, 12:29

Benutzt du SFML 2.0? Wenn nein, tu es ;)
Dort werden die Methoden klein geschrieben (pImage->loadFromFile("cannon.png").

Gelöschter Benutzer

unregistriert

3

24.08.2012, 14:33

Hab's mit beiden Versionen probiert. (SFML 2.0 allerdings VS2010). Das Ergebnis war dasselbe.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Justus96« (24.08.2012, 14:43)


4

24.08.2012, 14:45

Ich hab noch nie was mit SFML gemacht, aber mal so am Rande: Wenn das Bild nicht geladen werden konnte, wird pImage nie deletet, weil der return Aufruf das delete am Ende der main Funktion überspringt. Abhilfe schafft da beispielsweise ein std::unique_ptr: http://en.cppreference.com/w/cpp/memory/unique_ptr
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

24.08.2012, 15:45

Hast du die SFML mit deinem Kompiler selbst kompiliert?
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Oberon

Treue Seele

Beiträge: 181

Wohnort: Österreich

Beruf: Student

  • Private Nachricht senden

6

24.08.2012, 16:50

Nebenbei: Gibt es einen Grund dafür, das Image auf dem Heap zu erstellen?

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

24.08.2012, 17:12

Nebenbei: Gibt es einen Grund dafür, das Image auf dem Heap zu erstellen?

Zitat

Ich habe folgenden Code (auf's wesentliche reduziert):


;)
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

8

24.08.2012, 20:34

Zitat

Hab's mit beiden Versionen probiert. (SFML 2.0 allerdings VS2010). Das Ergebnis war dasselbe.
Mit was kompilierst du denn die Version mit SFML 1.6 und von wo hast du die DLLs? Mixst du Debug und Release Versionen?

Am Rande es lohnt sich sehr sich ein wenig über SmartPointers und RAII gescheit zu machen, anstatt manuell new und delete aufzurufen (somit könntest du dein momentanes mögliches Memory Leak einfach verhindern). ;)
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

Gelöschter Benutzer

unregistriert

9

25.08.2012, 11:03

Ich hatte tatsächlich bei einer Lib das "-d" Suffix vergessen. Jetzt funktioniert's.

Ansonsten danke für alle weiteren Hinweise. Die SmartPointer muss ich mir unbedingt mal anschauen.

Werbeanzeige