簡體   English   中英

C ++ DirectX無法讀取內存

[英]C++ DirectX Unable to read memory

我有一個具有所有D3D窗口函數的類,如下所示:

class cD3DWindow
{
public:
    cD3DWindow();
    ~cD3DWindow();

    void initD3D(HWND hWnd);
    void render_frame(void);
    void cleanD3D(void);
private:
    LPDIRECT3D9 d3d;
    LPDIRECT3DDEVICE9 d3ddev;
};

我這樣使用它:

void cD3DWindow::initD3D(HWND hWnd)
{
    d3d = Direct3DCreate9(D3D_SDK_VERSION);
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
    D3DXCreateFont(d3ddev, 20, 0, FW_EXTRABOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont);
}

但是當我調試程序時,它給了我以下錯誤: https : //gyazo.com/cb82a94606b2b3c1a49c55b03060d941

它可以編譯而沒有任何錯誤,但是當我嘗試啟動該程序時會崩潰。 如果我刪除以下內容,則該程序有效:

LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;

並將其粘貼到Main.cpp中,程序啟動時不會崩潰。

關於什么可能導致錯誤的任何想法?

在您發布的圖片上,“ this”指針為NULL。 這意味着您沒有初始化cD3DWindow實例。 但是您從空指針調用它。 它崩潰是因為d3d和d3ddev位於“ this”指針的內存位置,該指針為零。 如果將這兩個變量放在main.cpp(全局變量)中,則它們突然會占據適當的內存位置,並且因為您不使用“ this”指針,它也不會崩潰。

非虛擬類方法只是常規函數,使用“ this”指針作為“擁有”該方法的實例來調用。 如果使用“損壞的此”指針(如null)調用方法,則無法訪問該類中的字段,否則它將運行而不會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM