读取位置时发生访问冲突

场景:读取位置时发生访问冲突解决方案

读取位置时发生访问冲突
有大牛帮我解释并解决这个问题么?
在我的代码运行时出现读取位置时发生访问冲突的错误,这里是我的代码:
#include<windows.h>
#include<d3d9.h>

wchar_t *g_pClassName=L"HelloDirect3D"; //窗口类名
wchar_t *g_pWindowName=L"Direct3D实例"; //窗口标题名

LPDIRECT3DDEVICE9 g_pd3dDevice=NULL; //direct3d设备接口
HRESULT InitDirect3D(HWND hWnd); //初始化direct3d
VOID Direct3DRender(); //渲染图形
VOID Direct3DCleanup(); //清理direct3d资源

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int WINAPI WinMain(
HINSTANCE hInstance, //当前实例句柄
HINSTANCE hPrevInstance, //前一实例句柄
LPSTR lpCmdLine, //命令行参数指针
int nShowCmd) //窗口显示命令
{
//初始化窗口类
WNDCLASS wndclass;
wndclass.cbClsExtra=0;
wndclass.cbWndExtra=0;
wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //光标形状
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口小图标
wndclass.hInstance=hInstance;
wndclass.lpfnWndProc=WndProc; //消息处理函数
wndclass.lpszClassName=g_pClassName; //窗口类名
wndclass.lpszMenuName=NULL;
wndclass.style=CS_HREDRAW|CS_VREDRAW; //窗口样式

if(!RegisterClass(&wndclass))
return 0;
//////////////////////////////////////////////////////////////////////////
//创建窗口
HWND hWnd=CreateWindow(
g_pClassName, //窗口类名
g_pWindowName, //窗口标题
WS_OVERLAPPEDWINDOW, //窗口样式
CW_USEDEFAULT, //窗口最初的x位置
CW_USEDEFAULT, //窗口最初的y位置
CW_USEDEFAULT, //窗口的宽度
CW_USEDEFAULT, //窗口的高度
NULL, //父窗口句柄
NULL, //窗口菜单句柄
wndclass.hInstance, //应用程序实例句柄
NULL); //创建窗口的参数

InitDirect3D(hWnd);
//////////////////////////////////////////////////////////////////////////
ShowWindow(hWnd,nShowCmd); //显示窗口
UpdateWindow(hWnd); //更新窗口
//////////////////////////////////////////////////////////////////////////
//消息循环
MSG msg;
ZeroMemory(&msg,sizeof(msg));
while(msg.message!=WM_QUIT) //取得消息
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg); //转换消息
DispatchMessage(&msg); //投递消息
}
else
{
Direct3DRender(); //绘制3D场景
}
}
UnregisterClass(g_pClassName,wndclass.hInstance);
return 0;
}
//////////////////////////////////////////////////////////////////////////
//窗口消息处理函数
LRESULT CALLBACK WndProc(
HWND hWnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
switch (message)
{
case WM_PAINT: //客户区重绘消息
Direct3DRender(); //渲染图形
ValidateRect(hWnd,NULL);//更新客户区的显示
break;
case WM_DESTROY: //窗口销毁消息
Direct3DCleanup(); //清理direct3d
PostQuitMessage(0); //退出程序
break;
}
return DefWindowProc(hWnd,message,wParam,lParam);//默认的消息处理
}
HRESULT InitDirect3D(HWND hWnd)
{
LPDIRECT3D9 pD3D=NULL; //IDirect3D接口
pD3D=Direct3DCreate9(D3D_SDK_VERSION); //创建IDirect3D接口对象
if(pD3D==NULL) return E_FAIL;

D3DCAPS9 caps;
int vp=0;
pD3D->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,&caps); //获取指定设备的性能参数

if(caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT) //支持硬件顶点运算
vp=D3DCREATE_HARDWARE_VERTEXPROCESSING;
else //不支持,采用软件顶点运算
vp=D3DCREATE_SOFTWARE_VERTEXPROCESSING;
//////////////////////////////////////////////////////////////////////////
//创建Direct3D设备接口
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory(&d3dpp,sizeof(d3dpp));
d3dpp.BackBufferWidth=640;
d3dpp.BackBufferHeight=480;
d3dpp.BackBufferFormat=D3DFMT_A8B8G8R8;
d3dpp.BackBufferCount=1;
d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE;
d3dpp.MultiSampleQuality=0;
d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow=hWnd;
d3dpp.Windowed=true;
d3dpp.EnableAutoDepthStencil=true;
d3dpp.AutoDepthStencilFormat=D3DFMT_D24S8;
d3dpp.Flags=0;
d3dpp.FullScreen_RefreshRateInHz=D3DPRESENT_RATE_DEFAULT;
d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE;

pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,
hWnd,vp,&d3dpp,&g_pd3dDevice);

pD3D->Release(); //释放Direct3D接口
return S_OK;
}
//////////////////////////////////////////////////////////////////////////
//绘制3D场景
VOID Direct3DRender()
{
g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),1.0f,0);
g_pd3dDevice->BeginScene(); //开始绘制

g_pd3dDevice->EndScene(); //结束绘制
g_pd3dDevice->Present(NULL,NULL,NULL,NULL); //翻转
}
//////////////////////////////////////////////////////////////////////////
//清理Direct3D,并释放COM接口
VOID Direct3DCleanup()
{
if(g_pd3dDevice!=NULL)
g_pd3dDevice->Release();
g_pd3dDevice=NULL;
}

这段代码我调了好久,由于水平问题,我始终调不出来,哪位大牛能帮我吗??

------解决方案--------------------
下断点
pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,vp,&d3dpp,&g_pd3dDevice);
执行后g_pd3dDevice为NULL
我之前说了是D3DPRESENT_PARAMETERS参数设置的问题,你有仔细试验过?