Hopsel: (C++) Direct3D und unerlaubter Speicherzugriff

Beitrag lesen

Hi alle!

Ich versuche mich in der Programmierung mit Direct3D.
Der untenstehende Code wird anstandslos kompiliert und gelinkt.

Allerdings bekomme ich bei der Ausführung eine Fehlermeldung zu einem unerlaubten Speicherzugriff.
Wenn ich unten makierte Codezeile (der Übeltäter) auskommentiere, bekomme ich keinen unerlaubten Speicherzugriffsfehler mehr. Allerdings entsteht dann doch auch ein Memory-Leak, oder?

Ich kann beim besten Willen keinen Fehler sehen. Zumal der Code mit einem Buch erarbeitet wurde und nun nahezu vollständig in mein Programm eingeflossen ist.

// Auflisten alles auf dem System verfügbaren Direct3D-Adapter  
#include <StdIO.h>  
#include <D3D9.h>  
  
int           g_iNumAdapters;  
PDIRECT3D9    g_pD3D = NULL;  
  
int WINAPI WinMain(HINSTANCE hInstance,  
       HINSTANCE hPrevInstance,  
       LPSTR lpCmdLine,  
       int nCmdShow)  
{  
 char acAdapterInfo[1024];  
 char acTitle[64] = "Grafikkarte gefunden";  
  
 // Direct3D initialisieren  
 g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);  
 if(g_pD3D == NULL) {  
  // Fehler  
  MessageBox(NULL,"Fehler beim Erzeugen der D3D-Schnittstelle!","Fehler",MB_OK | MB_ICONEXCLAMATION);  
  return 1;  
 }  
  
 // Anzahl der Grafikkarten  
 g_iNumAdapters = g_pD3D->GetAdapterCount();  
 D3DADAPTER_IDENTIFIER9* g_pAdapters = new D3DADAPTER_IDENTIFIER9[g_iNumAdapters];  
  
 for(int iAdapter = 0; iAdapter < g_iNumAdapters; iAdapter++) {  
  if(FAILED(g_pD3D->GetAdapterIdentifier(0, 0, &g_pAdapters[g_iNumAdapters]))) {  
   // Keine Grafikkarte  
   MessageBox(NULL, "Keine Grafikkarte gefunden.", "Achtung!", MB_OK | MB_ICONEXCLAMATION);  
  
   // Direct3D freigeben  
   g_pD3D->Release();  
   delete[] g_pAdapters;  
  }  
  
  sprintf_s(acAdapterInfo,"Grafikkarte: %s",g_pAdapters[g_iNumAdapters].Description);  
  
  MessageBox(NULL, acAdapterInfo, acTitle, MB_OK | MB_ICONINFORMATION);  
 }  
  
  
 // Direct3D freigeben  
 g_pD3D->Release();  
  
// ####################################  
 delete[] g_pAdapters; // DER ÜBELTÄTER  
// ####################################  
// ####################################  
// ####################################  
// ####################################  
// ####################################  
  
 return 0;  
}

MfG H☼psel

--
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)