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

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

11

10.04.2009, 16:11

Aber damit änderst du doch einfach nur den Text... das allokiert ja nicht wirklich speicher?
Oder schreibst du den gleichen Text X mal übereinander, weshalb er 60mb/s frisst, man es aber nicht sieht?

Anonymous

unregistriert

12

10.04.2009, 16:21

Errschaffer
Natürlich darfst du da kein delete benutzen! Lies mal die Doku was du für einen Zeiger zurück bekommst und womit man den freigibt. Ich weiß es zwar, aber du sollst auch mal was lernen.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

13

10.04.2009, 16:32

Zitat von »"Errschaffer"«

Ja ich hab je die Stelle gefunden. Und zwar an der wo ich einen Text setze (SetText (); )

Nur wie soll ich das freigeben? Wenn ich m_Text delete stürzt das Programm ab (Null Pointer)

hmhmmm m_Text sollte eigentlich kein Nullpointer sein... und nullpointer kann man auch ohne probleme deleten.
Aber wie es aussieht, lädst du für jeden Text den Font neu... übergib Init() lieber einen pointer.... ansonsten solltest du wohl jedesmal TTF_CloseFont() aufrufen

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

14

10.04.2009, 16:35

m_Text wird ungültig wenn er deleted wird....

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

15

10.04.2009, 17:23

Zitat von »"n0_0ne"«

Zitat von »"Errschaffer"«

Ja ich hab je die Stelle gefunden. Und zwar an der wo ich einen Text setze (SetText (); )

Nur wie soll ich das freigeben? Wenn ich m_Text delete stürzt das Programm ab (Null Pointer)

hmhmmm m_Text sollte eigentlich kein Nullpointer sein... und nullpointer kann man auch ohne probleme deleten.
Aber wie es aussieht, lädst du für jeden Text den Font neu... übergib Init() lieber einen pointer.... ansonsten solltest du wohl jedesmal TTF_CloseFont() aufrufen


Habs jetzt so gemacht das ,der Font nur einmal während es Spieles geladen wird und nicht für jedes Text Objekt.

@ul werd ich heut abend mal machen

16

10.04.2009, 17:39

Zitat von »"Errschaffer"«

Habs jetzt so gemacht das ,der Font nur einmal während es Spieles geladen wird und nicht für jedes Text Objekt.
Auch wenn du damit die Anzahl Memory Leaks reduzieren kannst, solltest du den Speicher richtig freigeben. Lies dazu die Dokumentation der SDL.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

17

10.04.2009, 17:46

Ne ne das Memory Leak hab ich immer noch. Hat also nichts geholfen.
Werd heute Abend mal lesen.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

18

11.04.2009, 00:56

So ich hab mir jetzt mal die Doku angeschaut.

TTF_RenderText_Solid () gibt ja einen Zeiger auf das Surface zurück.
Also dachte ich an die Funktion SDL_FreeSurface ();

Nur leider klappt das auch nicht weil m_Text wieder ungültig wird.


C-/C++-Quelltext

1
2
3
4
5
6
7
void CText::SetText(string Text)
{
SDL_FreeSurface (m_Text);
m_Text=TTF_RenderText_Solid(m_Font,Text.c_str(),m_textColor);


}


Was anderes hab ich nicht gefunden. War die einzige Funktion die mir zusagte.

edit: Hab das selbe was ich hier ausprobiert habe auch in einem anderen Forum eben gerade gefunden. Wieso gehts bei mir nicht *Kopf gegen Wand haue*

Anonymous

unregistriert

19

11.04.2009, 01:15

bevor du freigibst sollteste mal auf NULL prüfen!

Schon mal versucht eine Türe zu öffnen die schon geöffnet ist? Ein bisschen nachdenken und gucken "hey, wie ist der Status?" können selbst Babys.

Warum haben Anfänger es eigentlich immer so schwer ein if zu benutzen?

Außerdem: Warum erzeugst du JEDEN FRAME (!!!!) den selben Text immer und immer wieder? Das ist doch der reinste Nonsens!

Sichere den übergebenen Text ab, erstelle deine Surface und sichere die. Wird die Funktion mit dem selben Text ausgeführt muss keine neue Surface erstellt werden. Du vögelst regelrecht den Speicher durch, um es mal ganz lapidar zu sagen und wunderst dich, dass nur Murks bei rum kommt. Etwas mehr Taktgefühl solltest du dem süßen Speicher mal entgegenbringen.

Errschaffer

Alter Hase

  • »Errschaffer« ist der Autor dieses Themas

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

20

11.04.2009, 10:16

*Immer noch Kopf gegen Wand haue und Danke sage*

Jetzt frisst er nur noch 4KB die Sekunde. Aber das muss wohl sein da ich ja jede Sekunde die FPS anzeige aktuallisieren muss. Damit kann ich auch leben ;) . Passiert eh nur wenn das Fenster minimiert ist.

Werbeanzeige