[C++/SFML] Draw Fehler

  • Hey,


    ich habe mir vor ein paar Tagen vorgenommen C++ zu lernen und mich mit SFML (vorher SDL) zu beschäftigen.
    Leider habe ich nun das Problem, wenn ich Texte in eine Klasse auslagere, dass mein Programm sobald der Text gezeichnet werden soll einfach crasht.
    Ich habe bisher nur einen Fehler gefunden der so ist wie meiner (http://stackoverflow.com/quest…55f-sfml-graphics-d-2-dll), aber leider steht dort keine Antwort drunter.
    Meine Fehlermeldung

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


    Code meiner Klasse

    Vielleicht hat jemand eine Lösung für das Problem, warum es beim Zeichnen zum Crash kommt?
    Ich bin mir nicht sicher ob es wichtig ist, aber ich nutze Visual Studio 2015.

  • So weit ich mich noch erinnern kann :) sollte es klappen wenn du einen Pointer bei sf::Text reinhaust sprich (in der .h File) sf::Text* Text;


    Dann bekommst du beim mitgeben für's rendern auch keine Fehlermeldung mehr, natürlich musst du dann ebenfalls noch einen Stern davor setzen :)


    //edit
    Sobald du einen Pointer beim Objekt Text anlegst musst du im Konstruktor der cpp Text = new sf::Text(); schreiben


    MFG

  • Hab das mit den Antworten dadrunter gar nicht gesehen gehabt.
    Es hatte super funktioniert, aber da die Struktur vom ganzen beschissen war habe ich alles nochmal neu geschrieben und mehr Struktur rein gebracht.
    Kriege wieder folgenden Fehler (Zeile 18):

    Code
    Ausnahme ausgelöst bei 0x0F5C80A6 (sfml-graphics-d-2.dll) in DrugClicker.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xCCCCCCD0.


    Benutze aber im Gegensatz zu vorher eine Referenz der Font:


    Sobald ich die setFont Funktion entferne crasht das Programm nicht mehr, allerdings ist dann auch kein Text zu sehen (ergibt ja auch Sinn).
    Die TTF Datei kann auch erfolgreich geladen werden, daran liegt es also schon mal nicht.
    Wenn ich mir bei "Render" den String von "getText()" ausgeben lasse stimmt es auch.
    Weiß vielleicht jemand woran das liegen kann oder kennt einer eine Möglichkeit das ganze besser zu debuggen?
    Danke im voraus. :)

  • @pierre65 was hat das hier: "sf::Font& font" in deinen Parametern zu suchen? Wenn schon sf::Font* font und kein '&'
    Schreib mir gegen Abend mal in Skype ^^ dann kann ich dir besser weiterhelfen als hier :D


    MFG

    Zitat

    It is important to note that the sf::Text instance doesn't copy the font that it uses, it only keeps a reference to it.

    Darum das &.
    Kannst mich bei Skype adden (derpierre65).


    // Edit: Leider habe ich das Problem immernoch :(


    Wer sich den Source mal anschauen mag: https://github.com/derpierre65/SFML/ (Fehler in https://github.com/derpierre65…lob/master/Button.cpp#L10)

  • pierre65:
    Ich habe mir den Code jetzt nicht so genau angeschaut aber hier
    (https://github.com/derpierre65…ster/MainMenuState.cpp#L4) erstellst du das Font "Objekt", dennoch geht nach dem Aufruf das Font Objekt "out of scope" d.H nach der Funktion wird der Speicher geleert.


    Du hast zwei Optionen;


    - Pointer dann in der Funktion auf dem heap erstellen (new sf:Font());
    - Oder einfach das "sf::Font test;" aus der Funktion in den Globalen Bereich verschieben.


    Immer aufpassen wenn du mit Referenzen Arbeitest ;)

  • Die Pointer Lösung habe ich durch Zufall ausprobiert und es hat auch funktioniert ^^
    Trotzdem danke für deine Antwort, spätestens jetzt hätte ich das dann auch gelöst.