Der Martin: (C++) Direct3D und unerlaubter Speicherzugriff

Beitrag lesen

Hallo,

if(g_pAdapters)  //Kurzschreibweise fuer if(g_pAdapters!=NULL)

das mit der Kurzschreibweise ist richtig - aber der Grundgedanke ein Trugschluss! Ich habe eben mal ein bisschen recherchiert und bin zu folgendem Ergebnis gekommen:

1. Der delete-Operator akzeptiert auch klaglos einen NULL-pointer. Das führt nicht zu einer Fehlermeldung; es passiert einfach bloß nichts.

2. Beim erfolgreichen delete wird der Zeiger _nicht_ auf NULL gesetzt, sondern behält seinen aktuellen, nun nicht mehr gültigen Wert. Deshalb ist die Abfrage, die du vorschlägst, sinnlos (Meine einzige Fundstelle zu _diesem_ Thema: http://www.linuxdocs.org/HOWTOs/C++Programming-HOWTO-10.html).

Fazit:
Wenn diese Zeile

delete[] g_pAdapters; // DER ÜBELTÄTER

einen Fehler auslöst, muss g_pAdapters einen von NULL verschiedenen Wert haben, der aber nicht auf das erwartete Array verweist!

Ciao,
 Martin

--
Denken ist wohl die schwerste Arbeit, die es gibt. Deshalb beschäftigen sich auch nur wenige damit.
  (Henry Ford, amerikanischer Industriepionier)