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

derpierre65

Frischling

  • »derpierre65« ist der Autor dieses Themas

Beiträge: 1

Wohnort: Berlin

  • Private Nachricht senden

1

15.01.2016, 22:27

[C++/SFML] Text draw Fehler

Hey,

ich habe mir mal SFML angeschaut, da ich mit SDL überhaupt nicht zufrieden war.
Nun habe ich leider einen Fehler...
Sobald ich versuche meinen Text zu zeichnen crasht das Programm mit folgenden Fehler:

Quellcode

1
Ausnahme ausgelöst bei 0x0F79FB6F (sfml-graphics-d-2.dll) in Test.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCCCCCD24.


Da ich (meiner Meinung nach) Objektorientiert arbeite bringt es jetzt nichts die Zeilen die zum Fehler führen zu posten,
darum habe ich mein aktuellen Source Code (.h/.ccp) mal auf GitHub hochgeladen, für die die sich das mal richtig anschauen wollen.
Link zu den ganzen Dateien: https://github.com/derpierre65/SFML/
Die Font wird gefunden und auch geladen, der Fehler tritt in Button.cpp Zeile 10 auf.

Bei Google habe ich auch so ein ähnliches Problem gefunden, aber dieses Problem löst leider nicht meines da ich bei mir die Font bereits als Referenz benutze.
Danke schon mal im voraus.


// Edit:

Problem gelöst.

C-/C++-Quelltext

1
sf::Font AngryBirds;

musste zu

C-/C++-Quelltext

1
sf::Font* AngryBirds = new sf::Font;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »derpierre65« (15.01.2016, 23:52)


Lares

1x Contest-Sieger

  • Private Nachricht senden

2

16.01.2016, 01:17

Deine Lösung hat nichts mit deinem Problem zu tun. Dein eigentliches Problem ist folgendes:
Deinen Button übergibst du den font test als Parameter. Der Font existiert aber nur innerhalb des Konstruktors von MainMenuState. Ergo der Font wird gelöscht und kann von Button nicht mehr benutzt werden. Deine Lösung funktioniert nur, weil du mit new neuen Speicher allokierst.
Ich vermute mal dass du kein entsprechendes delete in die Funktion gesetzt hast. Entsprechend hast du einen Speicherbereich vorliegen, auf den du nicht mehr manuell zugreifen kannst. Lediglich der Button weiß noch um diesen Speicherbereich, der Rest deines Programms aber nicht mehr. Das solltest du vermeiden.

Die eigentliche Lösung besteht darin, den Font als Attribut in MainMenuState-Klasse zu integrieren. Dadurch besteht der Font solange die entsprechende Instanz der Klasse besteht und wird gelöscht, wenn der MainMenuState gelöscht wird. Gibt noch andere Möglichkeiten, aber das sollte die einfachste sein.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lares« (16.01.2016, 01:33)


Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

3

16.01.2016, 12:24

Problem gelöst.

C-/C++-Quelltext

1
sf::Font AngryBirds;

musste zu

C-/C++-Quelltext

1
sf::Font* AngryBirds = new sf::Font;

Ich wittere ein Memory Leak. new benutzt man in modernem C++ nicht mehr.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

4

16.01.2016, 13:28

Problem gelöst.

C-/C++-Quelltext

1
sf::Font AngryBirds;

musste zu

C-/C++-Quelltext

1
sf::Font* AngryBirds = new sf::Font;

Ich wittere ein Memory Leak. new benutzt man in modernem C++ nicht mehr.

Ich würde "nicht mehr" durch "sehr selten" ersetzen.

5

17.01.2016, 12:59

Hm, ich hab das bis jetzt noch recht häufig benutzt...
Was macht man den stattdessen? Bin da offenbar nicht auf dem neuesten Stand.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

17.01.2016, 13:03

Smart-Pointer und make_unique. Betrifft allerdings das Thema hier nicht. Der Fehler wurde ja schon von Lares beschrieben.
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