我试图将矢量投射到void*
并返回。
该课程为glm::vec3
。
我正在做的是:
glm::vec3 a = glm::vec3(10,10,10);
void* b = static_cast<void*>(&a);
glm::vec3 new_a = *static_cast<glm::vec3*>(b);
现在,如果我在同一范围内执行这些操作,没问题,a
和new_a
是相同的。但是,如果我将void*
保存在类属性中,然后尝试将其转换回另一个函数中的vec3
,则从glm::vec3
转换为void*
现在错了a!=new_a
。
你知道为什么会这样吗?它可能与glm::vec3
的范围有关吗?
答案 0 :(得分:1)
您的a
很可能超出范围。请考虑以下示例:
class A
{
void foo()
{
glm::vec3 a = glm::vec3(10,10,10);
_ptr = static_cast<void*>(&a);
}
void * _ptr;
}
我们在此处获取a
的地址,将其转换为void*
并存储在类字段中。到现在为止还挺好。但是,a
是foo()
的局部变量,这意味着当foo()
退出时,a
将被删除,_ptr
将成为悬空指针。< / p>