当结构增长时,指向向量中元素的指针被设置为 NULL
Pointer pointing to an element in a vector gets set to NULL when the structure grows
指向对象的指针被设置为 NULL,尽管函数中的任何地方都没有 pointerToObj = NULL
。后来我将该指针用于某些事情,它会导致访问冲突异常。我还添加了一个测试指针以查看它是否会保留其值,但不会 - 两者同时设置为 NULL。
指针指向向量中的对象。有一次,我向矢量添加了一个新对象,因此结构变大了。在此之后,指针立即设置为 NULL。我对此进行了测试 - 所有指针,指向向量的某个元素,在我添加新对象后立即设置为 NULL。
我怀疑发生这种情况是因为 Vectors 的工作方式 - 如果我没记错的话,它们是基于 Stack 的。当堆栈必须加长自身时,它必须将自身复制到一个新的更大的数组中并删除旧的。但是现在新数组位于内存的其他地方,所以我的指针不再指向正确的位置。
真的是这样吗?
是的,将一个元素添加到 std::vector
可能会使指向其元素的指针因您描述的原因而失效(但它与堆栈没有任何关系)。你的指针并没有被神奇地设置为空,它只是指向一个不存在的对象。
指向对象的指针被设置为 NULL,尽管函数中的任何地方都没有 pointerToObj = NULL
。后来我将该指针用于某些事情,它会导致访问冲突异常。我还添加了一个测试指针以查看它是否会保留其值,但不会 - 两者同时设置为 NULL。
指针指向向量中的对象。有一次,我向矢量添加了一个新对象,因此结构变大了。在此之后,指针立即设置为 NULL。我对此进行了测试 - 所有指针,指向向量的某个元素,在我添加新对象后立即设置为 NULL。
我怀疑发生这种情况是因为 Vectors 的工作方式 - 如果我没记错的话,它们是基于 Stack 的。当堆栈必须加长自身时,它必须将自身复制到一个新的更大的数组中并删除旧的。但是现在新数组位于内存的其他地方,所以我的指针不再指向正确的位置。
真的是这样吗?
是的,将一个元素添加到 std::vector
可能会使指向其元素的指针因您描述的原因而失效(但它与堆栈没有任何关系)。你的指针并没有被神奇地设置为空,它只是指向一个不存在的对象。