访问冲突读取位置0xFFFFFFFF
XMMatrixTranspose Access violation reading location 0xFFFFFFFF
我有一个DirectX 11项目,我使用Beginning DirectX 11 Game Programming
书通过所有章节。我有我的相机到位,它一直没有崩溃,但最近当调试我的Obj Loader我发现它一直崩溃在XMMatrixTranspose
行,我已经交换了我的视图矩阵和投影矩阵,看看它是否特定于我的视图矩阵,它不是。
下面是导致错误
的代码块vMatrix = camera.GetViewMatrix();
vMatrix = XMMatrixTranspose(vMatrix);
pMatrix = XMMatrixPerspectiveFovLH(XM_PIDIV4, (float)(screenWidth / screenHeight), 0.01f, 100.0f);
pMatrix = XMMatrixTranspose(pMatrix);
这是在我的DX11::Render
函数中发现的。这在我的main.cpp
游戏循环中被称为,如下所示。
MSG msg = { 0 };
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
directX->Update(0.0f);
directX->Render();
}
}
directX->Shutdown();
我所有的变量都有内存,这段代码以前一直在工作,当它开始这样做时,它会间歇性地这样做,但现在它似乎一直在这样做。
任何帮助和指导将是惊人的!我已经研究了几个小时,找不到任何工作,我已经有这个问题了大约7个小时!它必须离开!!
提前感谢。
UPDATE现在已经回到间歇性崩溃
UPDATE 2我也使用xnamath而不是DXMath
您应该首先阅读MSDN程序员指南,特别是类型使用指南。
DirectXMath和XNAMath基本上是相同的库。XNAMath只是它的旧版本,上一次更新是在2011年。你应该转而使用DirectXMath。请看这篇博文。
最有可能的问题是,你试图使用在堆上声明的XMMATRIX
和/或XMMVECTOR
类型(即在你使用new
的类中),这将不正确对齐x86(32位)和ARM构建。它恰好与x64本机代码对齐,但这主要是一个愉快的意外。
换句话说,以下代码将导致x86(32位)和ARM的AV,具体取决于内存的布局,但将适用于x64本机:
struct A
{
XMMATRIX m;
};
A a = new A;
a->m = XMMatrixIdentity();
要使它在所有架构上健壮地工作,您需要使用:
struct A
{
XMFLOAT4X4 m;
};
A a = new A;
XMStoreFloat4x4(&A->m, XMMatrixIdentity());
你会使用XMFLOAT4X4
或类似的类型,不需要在你的类中对齐,然后使用显式的Load/Save函数。请注意,您还可以使用更紧凑的形式,如XMFLOAT4X3
,这取决于您的矩阵内容。
或者,您可以使用DirectX Tool Kit中的SimpleMath包装器,它通过c++转换操作符和构造函数的功能"自动"完成该操作。
struct A
{
Matrix m;
};
A a = new A;
A->m = XMMatrixIdentity();
// Note this is redundant
// as the Matrix default constructor sets it to identity already.
这个功能不是基本库的一部分,因为它有一些性能影响。通过将其作为SimpleMath包装器的一部分,它允许用户选择更简单的使用模型,同时防止意外地为其他人使用较慢的转换路径。
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 无法打开 fstream C++文件,即使它与 .cpp 位于同一位置
- 如何在特定位置追加 json 文件
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 访问冲突读取位置0xFFFFFFFF