2015-01-26 36 views
0

尽管函数中没有任何地方存在pointerToObj = NULL,但指向对象的指针被设置为NULL。后来,我使用该指针作为参数,并导致访问冲突异常。我还添加了一个测试指针来查看它是否会保留它的值,但是没有 - 两者同时被设置为NULL。当结构增长时,指向矢量中某个元素的指针将被设置为NULL

指针指向矢量中的对象。有一点,我向向量添加一个新对象,所以结构增长。在此之后,指针被设置为NULL。我测试了这一点 - 所有指向vector的某个元素的指针,在添加新对象后立即设置为NULL。

我怀疑这是因为Vector的工作方式 - 如果我没有弄错,他们是基于堆栈。当一个堆栈必须加长时,它必须将自己复制到一个新的更大的数组中,并删除旧数组。但是现在新的数组位于内存中的其他位置,所以我的指针不再指向正确的位置。

这是真的吗?

+0

'std :: vector'不能以你描述的方式工作,即将外部指针设置为NULL。您需要发布此行为的代码。 – 2015-01-27 00:49:47

+1

你确认指针实际上是否设置为NULL? **如何?(最小代码示例?)解除引用空指针会导致访问冲突(在Windows上),反之则不然。访问冲突发生在所有无效指针上,而不仅仅是空指针。 – MSalters 2015-01-27 01:01:18

回答

2

是的,将元素添加到std::vector可能会因您描述的原因(但它与堆栈无关)而使指向其元素的指针无效。你的指针并没有被神奇地设置为null,它只是指向一个不存在的对象。

+0

除此之外:解决方案是你不应该存储指向'vector'中的对象的指针。相反,存储对象的索引,或使用保留指针的容器。 – 2015-01-27 04:18:03

+0

是的,我迷惑了一个空指针与无效指针。猜猜我对一个关于矢量如何工作的误解。 – AlexSavAlexandrov 2015-01-27 11:46:30