gpt4 book ai didi

c++ - 删除 vector 中的指针时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 21:20:38 25 4
gpt4 key购买 nike

当用户想要删除对象时,我正在尝试删除 vector 中的对象指针。我正在尝试:

  1. 删除指针
  2. 从 vector 中移除指针

我在数据库类中有一个字符串到 vector 的映射。 vector 包含指向对象的指针。像这样:

database.h中objectMapobjectector的定义

private:
typedef std::vector<Object *> objectVector;
typedef std::map<std::string, objectVector> objectMap;
objectMap objects;

“database.cpp”中deleteId的实现

bool DataBase::deleteId(int id)
{
// vectors
for(objectMap::iterator vec = objects.begin(); vec != objects.end(); ++vec)
{
objectVector v = vec->second;
// objects
for(objectVector::iterator obj = v.begin(); obj != v.end(); ++obj)
{
if((*obj)->getId() == id)
{
delete *obj; // pointer
*obj = 0;
v.erase(obj); // erase from vector
modified = true;
return true;
}
}
}
return false;
}

我目前正在尝试调试程序,我正在打印整个对象映射以查看删除是否有效。问题是对象指针在删除后仍然存在,即使函数确认删除(即返回 true)。有人可以解释一下这是怎么回事吗?

最佳答案

objectVector v = vec->second;

按值复制 vector ,因此您指的是拷贝,而不是实际 vector 。

建议将该行更改为

objectVector& v = vec->second; // Reference to the "real" vector

使 obj 迭代器无效没有问题,因为您会在遇到删除元素时立即退出该函数。

关于c++ - 删除 vector 中的指针时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24104744/

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