mbr: (C++) Direct3D und unerlaubter Speicherzugriff

Beitrag lesen

Hallo,
du hast natürlich recht. Ich hatte auch vergessen, dass ich normalerweise (Wenn ich delete in if-Bedingungen einsetze) sowas schreibe:

delete pZeiger;
pZeiger=NULL;

Wobei ich auch eigentlich - ohne mich jetzt entschuldigen zu wollen - gar nicht so sehr daran gedacht habe, dass es an so einem doppelten delete liegen könnte, sondern eher, dass der Zeiger irgendwie auf einen "falschen" Speicherbereich zeigt. Wie auch immer: ich weiss ja gar nicht, was die Funktion

GetAdapterIdentifier(0, 0, &g_pAdapters[g_iNumAdapters])

macht. Vielleicht wird ja auch dort der Zeiger schon implizit wieder freigegeben?

Ich experimentiere hier übrigens gerade mit libharu (freie PDF Bibliothek für C++) herum und da gibt es in den Beispielen haufenweise Zeilen wie

/* Add font with PdfStandardEncoding and name it "StandardEncoding"*/
doc->AddType1Font(fd2, "StandardEncoding", new PdfStandardEncoding());

Und natürlich weit und breit kein delete zu sehen. Wie sollte es auch? Es wird ja ein neues Objekt erzeugt, das eigentlich keinen Namen hat (höchstens einen internen für den Compiler).
Aber: Memory-leaks scheint es auch nicht zu geben (zumindest, wenn ich Visual Studio trauen darf ;-) )

Vielen Dank übrigens für den Hinweis mit dem NULL-Zeiger und delete. Das wußte ich bisher noch nicht. Ist aber auch logisch (wie ich _jetzt_ gelesen habe), weil nämlich new im Fehlerfall (Wann passiert das schon?) NULL als Ergebnis zurückliefert.

Liebe Grüße

mbr

Nachtrag: habe mir gerade mal aus reiner Neugierde den Destruktor von PdfStandardEncoding angeschaut. weil ich dachte, da könnte evtl. sinngemäß sowas stehen:

delete this;
this=NULL;

(auch wenn ich nicht sicher bin, ob das Sinn machen würde - oder vielleicht sogar gefährlich ist). Aber dem ist nicht so. Es gibt lediglich ein paar interen Aufräumarbeiten.