【发布时间】:2014-12-23 09:13:45
【问题描述】:
在尝试将矩阵存储在结构中时,在使用XMLoadFloat4X4() 从结构中调用XMFLOAT4x4* 类型时,我在运行时收到断言失败错误。
这些值简单地存储为:
XMFLOAT4X4 *f4x4_Scale;
XMFLOAT4X4 *f4x4_Rotation;
XMFLOAT4X4 *f4x4_Translate;
XMFLOAT4X4 *f4x4_ObjectViewSpace;
大概是从结构内部的XMFLOAT4x4* 位置加载实际值。
我在转换函数内部调用XMLoadFloat4X4(),结构如下:
XMMATRIX Entity::Scale(float x, float y, float z){
XMMATRIX m_Scale = XMLoadFloat4x4(e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale);
m_Scale = XMMatrixScaling(x, y, z);
return m_Scale;
}
反汇编显示XMLoadFloat4x4() 函数本身内部有一个中断,但我无法理解。
有没有一种方法/方法可以用来解决与XMLoadFloat() 相关的断言失败错误? (或者关于断言错误的非常好的材料)和/或我做错了什么?
更新:
正如 Chuck Walbourn 所建议的,(XMFLOAT4X4)*pSource 指向 XMLoadFloat4X4() 的指针是 NULL,满足函数的断言条件。传递的指针一开始是未初始化的,然后我尝试在[堆上]设置指针。
设置了一个手表,并使用XMStoreFloat4X4() 将XMFLOAT4X4 值初始化为矩阵恒等式。
XMMATRIX Identity = XMMatrixIdentity();
XMStoreFloat4x4(&e_Asset.Asset.FileDesc.matrixTransformation.f4x4_Scale, Identity);
最后的罪魁祸首是转换函数有很多重载,而我错过了之前的一个杂散调试步骤(我在其中一个函数中设置了一个新的XMFLOAT4X4 变量并且从未初始化它)。问题已解决。
【问题讨论】:
标签: c++ debugging directx-11 assertions