gpt4 book ai didi

c++ - 将 glm::vec3 常量引用分配给另一个 glm::vec3 时发生奇怪的崩溃

转载 作者:行者123 更新时间:2023-11-28 00:15:33 32 4
gpt4 key购买 nike

我有一个 ModelMatrix 类,其中我有一个 glm::vec3 定义为

glm::vec3 *position = nullptr;

然后我得到了一个setter方法

void ModelMatrix::SetPosition(const glm::vec3 &position)
{
delete this->position;

*this->position = position;
}

在分配常量引用时出现问题。

它进入这个方法

template <typename T, precision P>
GLM_FUNC_QUALIFIER tvec3<T, P>& tvec3<T, P>::operator= (tvec3<T, P> const & v)
{
this->x = v.x;
this->y = v.y;
this->z = v.z;
return *this;
}

然后就在方法的第一行崩溃了。

这是调用堆栈中的一个片段。

glm::detail::tvec3<float, (glm::precision)0>::operator= at type_vec3.inl:189 0x404f78   
core3d::ModelMatrix::SetPosition() at ModelMatrix.cpp:58 0x405bc3
core3d::ModelMatrix::ModelMatrix() at ModelMatrix.cpp:7 0x40582b

我没有任何错误信息。是什么导致了这个错误?

最佳答案

这里更好的方法是根本不使用指针。 glm::vec3 是一种固定大小的类型,可能使用 12 或 16 个字节。我认为完全没有必要为其使用单独的动态分配。

因此,您当前将类(class)成员声明为:

glm::vec3 *position;

只需将其更改为:

glm::vec3 position;

然后删除您当前对类成员的所有new/delete 调用。然后 setter 方法变为:

void ModelMatrix::SetPosition(const glm::vec3 &position)
{
this->position = position;
}

关于c++ - 将 glm::vec3 常量引用分配给另一个 glm::vec3 时发生奇怪的崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30556674/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com