当创建新的btConvexHullShape时,子弹物理第一次出现异常
Bullet Physics First Chance Exception When Creating New btConvexHullShape
当我创建一个新的btConvexHullShape时,我得到一个第一次机会异常。代码:
btConvexHullShape* m_collisionShapes;
m_collisionShapes = static_cast<btConvexHullShape*>(malloc(sizeof(btConvexHullShape)* MAX_BODY_COUNT));
new (&m_collisionShapes[m_activeBodyCount]) btConvexHullShape();
我也试过:
std::vector<btConvexHullShape> m_hulls;
m_hulls.resize(MAX_BODY_COUNT);
new
和resize
呼叫异常。例外是:
Unhandled exception at 0x0102C983 in Useful_Engine.exe:
0xC0000005: Access violation reading location 0xFFFFFFFF.
它出现在项目符号源代码的内部:
/**@brief Return the elementwise product of two vectors */
SIMD_FORCE_INLINE btVector3
operator*(const btVector3& v1, const btVector3& v2)
{
#if defined(BT_USE_SSE_IN_API) && defined (BT_USE_SSE)
return btVector3(_mm_mul_ps(v1.mVec128, v2.mVec128));
#elif defined(BT_USE_NEON)
return btVector3(vmulq_f32(v1.mVec128, v2.mVec128));
#else
return btVector3(
v1.m_floats[0] * v2.m_floats[0],
v1.m_floats[1] * v2.m_floats[1],
v1.m_floats[2] * v2.m_floats[2]);
#endif
}
这是已知的问题吗?
这看起来像是内存对齐问题。请记住,几乎所有的Bullet数据类型都是对齐的。对他们来说,Bullet凌驾于"新"运营商之上。对于子弹类型,使用malloc和vector是危险的。而不是使用向量,你应该使用btAlignedObjectArray。如果你真的需要手动分配内存,你可以尝试使用对齐分配。对于内存分配子弹使用btAlignedAlloc。或者你可以用下面的方法创建你的数组:
btAlignedObjectArray<btConvexHullShape> m_hulls;
m_hulls.resize(MAX_BODY_COUNT);
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 我必须构建我的项目 2 次,第一次失败,因为它无法打开库
- 是什么导致我的循环在第一次迭代中运行得更慢
- QLibrary 函数在第一次调用时工作缓慢
- 第一次尝试使用new动态创建结构数组,程序挂起没有错误
- 为什么第一次迭代后的指针指向随机值?
- 如何防止GUI挂起,同时允许第二次操作与Qt中的第一次操作一起执行
- LAPACK函数在第一次迭代后变慢
- 为什么 Boost unordered_map 在第一次插入时需要太多时间?
- EGL 在第一次 opengl 函数调用时崩溃
- C++程序在第一次尝试时会给出垃圾,但如果它捕获异常并重试,则会给出适当的值
- 创建CFrameWnd会给出第一次机会的异常——为什么
- MSXML6 中的第一次机会异常
- 错误地使用fprintf?获取异常 第一次机会异常
- 我的代码中的第一次机会异常
- 为什么我得到第一次机会异常,如果没有人调用该函数
- 在0x5919c8ec (msvcr100d.dll)的第一次机会异常:0xC0000005:访问违反读取位置0xfee
- c++ OBJ解析器-第一次机会异常
- 当创建新的btConvexHullShape时,子弹物理第一次出现异常
- 此异常是什么意思>第一次机会异常在 Project3 中0x000007FEFD38A06D时未处理的异常.exe