【发布时间】:2013-04-01 23:10:04
【问题描述】:
我一直在尝试使用 XMVECTOR 作为边界框的类成员,因为我做了很多计算,但我每帧只使用一次 XMFLOAT3,所以边界框有一种方法可以让我把它作为中心在 XMFLOAT3 中,否则它会留在 XMVECTOR 中;该类使用 __declspec(align(16)) 进行删除并在调试模式下工作。但是在发布模式下,它会在我将其设置为某些东西的瞬间崩溃:
Box& Box::operator=(const Box& box)
{
_center = box._center;
_extents = box._extents;
return *this;
}
每当我这样做时:
Box A;
Box B;
A = B;
它崩溃了,给我 0xC0000005:访问冲突读取位置 0x00000000。 当我将它创建为指针时它也会崩溃:
Box* A = new Box();
这是构造函数:
Box::Box()
{
center = XMVectorZero();
extents = XMVectorSplatOne();
}
同样,这在 Debug 模式下运行良好,但在 Release 中它崩溃了。Release 模式会发生什么变化而生成无效代码?除了将框对齐到 16 字节之外,我还需要做其他事情吗?
【问题讨论】:
-
请注意,您不需要创建
Box类。 DirectXMath 包含BoundingBox已经在DirectXCollision.h标头中。
标签: c++ simd release-mode directxmath