我在一个名为ModelClass的类中有一个函数,该函数执行以下操作:
bool ModelClass::SetVertices(ID3D11Device* device, VertexType* vertices)
{
// Error catching variable
HRESULT result;
// Setup the vertex buffer description
D3D11_BUFFER_DESC vertexBufferDesc;
ZeroMemory(&vertexBufferDesc, sizeof(vertexBufferDesc));
vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
vertexBufferDesc.ByteWidth = sizeof(vertices)*24;
vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
vertexBufferDesc.CPUAccessFlags = 0;
vertexBufferDesc.MiscFlags = 0;
//vertexBufferDesc.StructureByteStride = 0;
// Give the subresource structure a pointer to the vertex data.
D3D11_SUBRESOURCE_DATA vertexData;
ZeroMemory(&vertexData, sizeof(vertexData));
vertexData.pSysMem = vertices;
vertexData.SysMemPitch = 0;
vertexData.SysMemSlicePitch = 0;
// Create the Vertex Buffer
result = device->CreateBuffer(&vertexBufferDesc, &vertexData, &m_vertexBuffer);
if (FAILED(result))
{
return false;
}
return true;
}
运行此命令,会给我一个错误消息,提示“ Visual Studio指向
result = ...
行,Engine.exe中0x00E445A2的未处理异常:0xC0000005:访问冲突读取位置0x00000000。”。对于我的一生,我无法弄清楚为什么这样做。我什至不知道还要发布什么,所以我只列举一些我认为相关的东西:ModelClass::ModelClass(ID3D11Device* device, VertexType* vertices, unsigned long* indices)
{
m_vertexBuffer = 0;
m_indexBuffer = 0;
SetVertices(device, vertices);
SetIndices(device, indices);
}
该类是使用
ModelClass* cube1 = new ModelClass(d3d11Device, v, indices);
定义的,在全局范围内(目前),使用上面的代码框中的构造函数。m_vertexBuffer
变量在类头文件中声明为ID3D11Buffer *m_vertexBuffer
,并在类构造函数中初始化为零。Visual Studio 2013,Windows 8.1 64位上的DirectX 11
如果我将SetVertices函数的内容复制到我的主文件(包含大部分设置)中,则它可以立即工作而不会出现此错误。仅当我从类内部调用CreateBuffer时才会发生。这与我的索引缓冲区的工作方式完全相同,这表明顶点结构没有问题
该类的所有函数和变量都是公共的
即使将一个,多个或所有参数设置为NULL,CreateBuffer仍会引发该异常(即,我认为m_vertexBuffer,数据或缓冲区描述不存在问题)
我的主要猜测是,它与类如何使用这些函数有关,但是我的代码找不到任何错误
拜托,如果您想查看其余文件,请发表评论,如果有必要,我将粘贴整个内容,这已经使我无所适从
最佳答案
很棒的网站,RasterTek。
无论如何,问题在于您正在初始化d3d11Device
之前在全局范围内初始化此东西。当程序以任意顺序启动时,将立即创建在全局范围内声明的所有内容。另一方面,d3d11Device
在程序启动时未初始化。
将其移出全局范围,或从教程中重新添加Initialize
函数。问题解决了。
关于c++ - CreateBuffer抛出“访问冲突读取位置”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21223337/