我有一个类具有我的所有D3D窗口函数:
years
我这样使用它:
class cD3DWindow
{
public:
cD3DWindow();
~cD3DWindow();
void initD3D(HWND hWnd);
void render_frame(void);
void cleanD3D(void);
private:
LPDIRECT3D9 d3d;
LPDIRECT3DDEVICE9 d3ddev;
};
但是当我调试我的程序时它给了我以下错误: https://gyazo.com/cb82a94606b2b3c1a49c55b03060d941
它编译时没有任何错误但是当我尝试启动程序时它会崩溃。 如果我删除以下内容,该程序将起作用:
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);
}
将其粘贴到Main.cpp中,程序启动时不会崩溃。
有什么可能导致错误的想法吗?
答案 0 :(得分:2)
在您发布的图片上,您的“this”指针为NULL。这意味着您没有初始化您的cD3DWindow实例。但是你是从空指针调用它。它崩溃是因为d3d和d3ddev位于“this”指针的内存位置,该指针为零。如果你将这两个变量放在main.cpp(全局变量)中,突然它们有一个合适的内存位置,并且因为你没有使用“this”指针它就不会崩溃。
非虚拟类方法只是常规函数,使用“this”指针作为“拥有”该方法的实例调用。如果你使用“corrupted this”指针调用一个方法(如null),那么你就无法访问该类中的字段,否则它将在没有崩溃的情况下运行。