mbr: (C++) Direct3D und unerlaubter Speicherzugriff

Beitrag lesen

Hallo, Der Martin

Ich werde den Eindruck nicht los, dass da in deinem Code ein logischer Fehler steckt. Du versuchst in der for-Schleife, die vorhandene(n) Grafikkarte(n) zu finden. Falls das in _einem_ Durchlauf fehlschlägt, gibst du innerhalb der Schleife sowohl das g_pD3D-Objekt wieder frei (g_pD3D->Release()) als auch das Array g_pAdapters.
Und nach dem Ende der Schleife tust du dasselbe nochmal?
Ohne die D3D-Funktionen genau zu kennen, würde ich zumindest sagen: Das ist verdächtig.

Jau, war auch meine Idee - natuerlich warst du wieder mal etwas schneller ;-)
Allerdings sollte _dieses_ Problem nur im Fehlerfall auftreten und der OP hat nichts davon geschrieben, ob er die MessageBox sieht, oder nicht (gut, bin mir nicht sicher, ob man von der Abarbeitung des Programmcodes her eine Chance hat, sie zu sehen, oder ob der Fehler "schneller" ist ;-) )

Abgesehen davon: Ist das korrekt, den delete-Operator noch mit Index-Klammern auszustatten? Anhand der Deklaration von g_pAdapters ist eh klar, dass es sich um ein Array handelt. Ich habe diese Klammern bei delete jedenfalls noch nie gesetzt; sie irritieren mich. Mag aber auch an meiner generell geringen Praxis mit OOP und C++ zusammenhängen - ich bevorzuge sonst "reines" C und malloc() und free() (bzw. deren Win32-API-Entsprechungen) zur Speicherverwaltung

Also ich habe mal gelernt, dass man, wenn man Arrays alloziert immer die Klammern bei delete setzen sollte, auch wenn einige Compiler ohne auskommen. Ich meine auch, mich zu erinnern, dass mir dieses Problem schon mal auf die Füße gefallen ist (VC 6.0: mit [] funktionierte es, ohne schmierte mir das Programm ab) - allerdings ist das schon wieder ne Weile her und vielleicht trübt mich meine Erinnerung. Wie auch immer, ich setze die Klammern auf jeden Fall immer, wenn ich auch mit new ein Array angefordert habe.

mit freundlichem Gruß

mbr