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
Administrator
Das mit den ungesicherten news war mir noch gar nicht bewusst. Wie macht man denn aus einem ungesicherten ein gesichertes new? Da wir in der Engine einen Memory Manager hatten, bin ich eigentlich sicher, das wir in dem Bereich keine Fehler haben.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »drakon« (04.06.2010, 21:51)
Also habe nochmal kurz reingeschaut. z.B im Konstruktor von GPMenu werden ja ein paar Allokationen mit new gemacht und im Destruktor freigegeben. Wenn jetzt irgendwo dazwischen eine Exception kommt, dann passieren böse Dinge, wenn die Zeiger nicht initialisiert sind (was bei euch ja nicht der Fall ist) und sie mit delete zerstört werden (undefiniert, aber Absturz wahrscheinlich).
Das scheint ihr aber mit dem implementieren von einem eigenen new gelöst zu haben. (hab mal eine Exception provoziert und es gibt keinen Laufzeitfehler)
Also habe nochmal kurz reingeschaut. z.B im Konstruktor von GPMenu werden ja ein paar Allokationen mit new gemacht und im Destruktor freigegeben. Wenn jetzt irgendwo dazwischen eine Exception kommt, dann passieren böse Dinge, wenn die Zeiger nicht initialisiert sind (was bei euch ja nicht der Fall ist) und sie mit delete zerstört werden (undefiniert, aber Absturz wahrscheinlich).
Das scheint ihr aber mit dem implementieren von einem eigenen new gelöst zu haben. (hab mal eine Exception provoziert und es gibt keinen Laufzeitfehler)
Wo ist für dich "dazwischen"? Solange der Konstruktor nicht vollständig ausgeführt wurde (d.h. alle Allokationen ohne Exceptions dazwischen erfolgreich durchgeführt und somit alle Pointers zwangsläufig initialisiert wurden), wird der Destruktor nie ausgeführt, und somit auch kein uninitialisierter Pointer deleted. Der Worst Case ist, dass bereits alloziierter Speicher bei Exception in der Mitte des Konstruktors nicht freigegeben wird, uninitialisierte Pointers werden dabei aber garantiert nicht per Destruktor angerührt.
idontknow
unregistriert
Werbeanzeige