gpt4 book ai didi

c++ - 尝试访问指向 vector 中对象的指针时出现无效访问错误

转载 作者:行者123 更新时间:2023-11-30 03:02:55 24 4
gpt4 key购买 nike

我在一个类中有一个方法,它获取指向另一个对象(不同类的)的指针,并将一个对象(另一个不同类的)添加到作为第一个对象(那个对象的成员变量)的 vector 作为参数传递)。这是代码:

ObstacleManager::ObstacleManager(Application *lApp)
{
app=lApp;
GLfloat obstacleVerts[12]={
-0.1f,-0.2f,0.0f,
0.1f,-0.2f,0.0f,
-0.1f,0.2f,0.0f,
0.1f,0.2f,0.0f
};
StandardObstacle obstacle(obstacleVerts,-0.7f,0.0f,4);
obstacle.manager=this;
lApp->characters.push_back(&obstacle);
}

我认为问题在于障碍物对象在不该被释放的时候被释放了,因为如果我更改代码并使用“new”创建障碍物(如果您使用 new 创建一个对象,则必须手动删除它,不是吗?)它有效。像这样:

ObstacleManager::ObstacleManager(Application *lApp)
{
app=lApp;
GLfloat obstacleVerts[12]={
-0.1f,-0.2f,0.0f,
0.1f,-0.2f,0.0f,
-0.1f,0.2f,0.0f,
0.1f,0.2f,0.0f
};
StandardObstacle *obstacle=new StandardObstacle(obstacleVerts,-0.7f,0.0f,4);
obstacle->manager=this;
lApp->characters.push_back(obstacle);
}

有没有办法防止这种情况发生?

最佳答案

您将本地对象的地址传递给 vector ,一旦构造函数返回,本地对象就不存在,然后您的 vector 有一个指向无效内存的指针。

你必须让对象持久化,可能的方法是:
只需按值推送对象或
使用动态分配的对象,而不是原始指针,使用像 shared_ptr 这样的智能指针作为 vector 元素类型。

关于c++ - 尝试访问指向 vector 中对象的指针时出现无效访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811677/

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