【发布时间】:2013-11-17 01:08:58
【问题描述】:
最近,我对为什么在尝试访问某些对象指针的vector 中的元素时不断遇到分段错误感到困惑。我没有设法解决这个问题,但我怀疑这是因为在我将对象指针推入vector 之后,我在其上调用了delete,认为vector 存储了一个副本。
在以下代码中:
std::vector<SomeObject *> testvector;
SomeObject * testobject = new SomeObject(/* some arguments here, call constructor */)
testvector.push_back(testobject);
delete testobject; // does this affect the element in the vector?
调试器确认添加到向量中的指针确实具有正确的数据,但是一旦我对它们调用 delete,我不确定向量内的元素是否受到影响。向量是否只存储一个副本?当我在对象上调用 delete 时,我怀疑在向量中的指针上调用了 delete,但我不确定。
现在我尝试在调用 delete 后打印出向量中的数据,我得到了这个:??? ?? ??? ???
我假设删除调用影响了向量元素。是这样吗?我认为在添加指向向量的指针后,我可以安全地释放对象而不影响向量中的元素,但似乎我最终访问了不再分配的内存。调用 delete 会影响向量中的指针吗?
【问题讨论】:
-
这就是为什么您不将原始指针存储在向量中的原因,那么您不必担心这样做的人会发生什么
标签: c++ pointers memory-management vector