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

1

25.05.2011, 21:06

[gelöst] std::fstream Operator << und der Heap

Hallo Leute,

diesmal eine relativ kurze Frage, aber ich komm nicht drauf.
Wie kann ich den << Operator von if- sowie ofstream benutzen, wenn der stream auf dem Heap erzeugt wurde, ich also nur per Zeiger darauf zugreifen kann?

Folgendes lässt sich zwar kompilieren, erzeugt komischerweise allerdings nur durch die pure Anwesenheit im Code Heap-Errors. Selbst wenn die Funktion, falls sie denn doch irgendwo aufgerufen werden sollte (und ich habs vllt. übersehen), vor dem Code Stück per return abbricht. Lasse ich das return drin, mache aber das Code Strück unten dran weg funktioniert alles, obwohl sich die Funktion gleich verhalten sollte, aufgrund des returns.
Kurz: Es tritt eine Heap-Corruption auf, bevor dieser Operator benutzt bzw. überhaupt dieses Objekt erst erzeugt wurde. Und zwar an Stellen, die eigentlich 100%ig funktionieren und richtig sind. So tritt zum Beispiel ein Fehler beim Laden eines PNGs auf, falls der Code nicht auskommentiert wurde.


Hier der Code, wie ich es probiert habe:

C-/C++-Quelltext

1
2
std::ofstream *stream = new std::ofstream (filename);
*stream << "bla bla" << std::endl;


Wäre schön, wenn mir jemand zeigt wies richtig geht :)
Falls jemand dazu noch ne Erklärung zu dem oben geschilderten Problem hat, umso besser, für mich ist das nämlich alles andere als logisch, dass das Codestückchen nur durch seine Anwesenheit Fehler verursacht.

Ach ja ich benutze VS C++ 2010 Express, falls das hier wichtig sein könnte.

lg chaia

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Chaia*« (25.05.2011, 22:01)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

25.05.2011, 21:19

Geht genau so wie in deinem Beispiel. Die Probleme die du beschreibst werden sicherlich nicht durch diese Zeilen verursacht sondern weil du irgendwo anders wohl was Böses machst, z.B. an Speicherstellen schreiben die dir nicht gehören. Dem Debug-Heap fällt das dann erst beim nächsten Mal wo Speicher angefordert wird auf, das ist bei dir dann wohl eben zufällig beim Laden einer PNG. Die Stelle wo der eigentliche Fehler passiert liegt in so einem Fall ganz wo anders...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (25.05.2011, 21:25)


3

25.05.2011, 22:00

Habe das ganze Projekt jetzt mal bereinigt und nun funktioniert es.
Dass der Debug-Heap einen Fehler erst beim nächsten anfordern von Speicher bemerkt, hatte ich schon mal irgendwo gelesen, aber was mich stutzig machte war, dass ich davor praktisch nichts gemacht habe (nur ein RenderWindow und ne Textur erzeugt). Außerdem konnte ich diese Stelle gegen jede beliebige andere Anforderung von Speicher austauschen, da geschah dann nichts. Dabei hätte er dort dann doch ebenfalls einen Fehler feststellen müssen, wenn ich davor irgendwo was böses gemacht habe oder?
Naja jedenfalls werd ich jetzt immer dafür sorgen, dass ich meine Projekte immer schön ordentlich halte :)

Werbeanzeige