Laufzeitfehler wie kann ich ihn beheben?



  • Hallo

    Ich habe ein 3D Game begonnen zu programmieren. Doch nun tritt ein Laufzeitfehler in das Programm ein. Ich habe bereits mit dem Debugger überprüft und habe den Fehlerort gefunden. Doch ich weiss nicht wie man ihn beheben kann.

    Hier der Code:

    // Square.h
    //
    #include <d3d9.h>
    
    #pragma comment (lib, "d3d9.lib")
    
    static LPDIRECT3D9 d3d;
    static LPDIRECT3DDEVICE9 d3ddev; 
    
    struct CUSTOMVERTEX {FLOAT X, Y, Z, RHW; DWORD COLOR;};
    #define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
    
    // Klasse erzeugen
    //
    class CSquare
    {
    public:
    
    	void InitSquare();
    	void RenderSquare();
    	void ClearSquare();
    
    private:
    
    };
    
    #include "Square.h"
    
    LPDIRECT3DVERTEXBUFFER9 v_buffer;
    
    void CSquare::InitSquare()
    {
    	// create the vertices using the CUSTOMVERTEX struct
        CUSTOMVERTEX vertices[] =
        {
            { 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), },
            { 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), },
            { 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), },
        };
    
    	MessageBox(NULL, "Bis hier funktioniert es!", "Test",
    			   MB_OK | MB_ICONEXCLAMATION);
    
        // create a vertex buffer interface called v_buffer
        d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
                                   0,
                                   CUSTOMFVF,
                                   D3DPOOL_DEFAULT,
                                   &v_buffer,
                                   NULL);
    
    	MessageBox(NULL, "Bis hier funktionert es auch!", "Test",
    			   MB_OK | MB_ICONEXCLAMATION);
    
        VOID * pVoid;    // a void pointer
    
        // lock v_buffer and load the vertices into it
        v_buffer->Lock(0, 0, (void**)&pVoid, 0);
        memcpy(pVoid, vertices, sizeof(vertices));
        v_buffer->Unlock();
    }
    
    void CSquare::RenderSquare()
    {
    	// select which vertex format we are using
        d3ddev->SetFVF(CUSTOMFVF);
    
        // select the vertex buffer to display
        d3ddev->SetStreamSource(0, v_buffer, 0, sizeof(CUSTOMVERTEX));
    
        // copy the vertex buffer to the back buffer
        d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
    }
    
    void CSquare::ClearSquare()
    {
    	v_buffer->Release();
    }
    

    Bei diesem Teil des Codes wird der Fehler im Debugger angezeigt:

    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),
                                   0,
                                   CUSTOMFVF,
                                   D3DPOOL_DEFAULT,
                                   &v_buffer,
                                   NULL); // Hier wird der Fehler angezeigt
    

    Kann mir hier jemand helfen, und sagen, wie ich den Fehler beheben kann?

    Gruss Patrick



  • Auch auf diesem Board ist eine Fehlermeldung meist äußerst hilfreich.

    Zur Info der alte Thread: http://c-plusplus.net/forum/viewtopic-var-t-is-246499-and-start-is-0.html



  • Ja genau das ist die Fehlermeldung:

    Visual C++ 2008 Express Edition

    Unbehandelte Ausnahme bei 0x00411cee in 3DGame.exe: 0xC0000005:
    Zugriffsverletzung beim Lesen an Position 0x00000000.



  • Hast du denn mal meinen Vorschlag umgesetzt? Ich kenne die Funktion zwar nicht, aber 'Lesen an Position 0x0' hört sich stark nach NULL-Pointer an.


  • Mod

    crosspostings sind unerwuenscht. wenn du meinst, dass ein thread woanders hin soll, dann bitte um eine verschiebung, ansonsten kann niemand allen moeglichen threads zu einem thema folgen.

    danke


Anmelden zum Antworten