我正在尝试从我的 ODE(开放动态引擎)模拟中返回身体对象的浮点 x、y 和 z 角度值。
float* Creature::eulerAngles(const float &q0, const float &q1, const float &q2, const float &q3){
float angles[3] = {atan2(2 * (q0*q1 + q2*q3), 1 - 2 * (q1*q1 + q2*q2)),
asin( 2 * (q0*q2 - q3*q1)),
atan2(2 * (q0*q3 + q1*q2), 1 - 2 * (q2*q2 + q3*q3))};
return angles;
}
因为 dBodyGetQuaternion
返回 4 个 const float 四元数,所以我需要然后得到旋转,我在尝试编译它时遇到了巨大的困难。现在它确实编译了,但我收到了这个警告。
谁能向我解释一下为什么以及这意味着什么?
原文由 Jade 发布,翻译遵循 CC BY-SA 4.0 许可协议
定义一个本地数组。
该声明
返回指向数组第一个元素的指针。
但是,一旦函数返回,数组就会被破坏。因此,返回的指针是一个悬空指针。
这就是编译器警告您的内容。如果在调用函数中取消引用返回的指针,则会调用未定义的行为。
为了返回指向在函数返回后仍然有效的数组的指针,您需要分配动态内存并返回动态内存。
请记住,如果您执行上述操作,则必须确保在调用函数的返回指针上调用
delete []
。为了避免手动分配和释放内存的麻烦,您可以使用
std::vector<float>
作为您的返回类型。这样,内存管理就会自动为您完成。
由于数组的大小固定为 3,因此使用
std::array<float, 3>
比使用std::vector<float>
更好: