C++ 当结构增长时,指向向量中元素的指针被设置为NULL
指向对象的指针被设置为NULL,尽管函数中的任何地方都没有C++ 当结构增长时,指向向量中元素的指针被设置为NULL,c++,arrays,pointers,vector,C++,Arrays,Pointers,Vector,指向对象的指针被设置为NULL,尽管函数中的任何地方都没有pointerToObj=NULL。稍后,我将该指针用于某个对象,它会导致访问冲突异常。我还添加了一个测试指针,以查看它是否会保留其值,但否-两者都会同时设置为NULL 指针指向向量中的对象。在某一点上,我向向量添加了一个新对象,因此结构会增长。紧接着,指针被设置为NULL。我测试了这个-所有指向向量某个元素的指针,在我添加新对象后立即设置为NULL 我怀疑这是因为向量的工作方式——如果我没有弄错的话,它们是基于堆栈的。当堆栈必须加长自身
pointerToObj=NULL
。稍后,我将该指针用于某个对象,它会导致访问冲突异常。我还添加了一个测试指针,以查看它是否会保留其值,但否-两者都会同时设置为NULL
指针指向向量中的对象。在某一点上,我向向量添加了一个新对象,因此结构会增长。紧接着,指针被设置为NULL。我测试了这个-所有指向向量某个元素的指针,在我添加新对象后立即设置为NULL
我怀疑这是因为向量的工作方式——如果我没有弄错的话,它们是基于堆栈的。当堆栈必须加长自身时,它必须将自身复制到一个新的更大的数组中,并删除旧的数组。但现在新数组位于内存中的其他位置,因此我的指针不再指向正确的位置
真的是这样吗?是的,将元素添加到
std::vector
可能会由于您描述的原因使指向其元素的指针无效(但这与堆栈无关)。不过,指针并没有神奇地设置为null,它只是指向一个不存在的对象。std::vector
并不像您描述的那样工作,外部指针被设置为null。您需要发布此行为的代码。您是否验证了指针实际上已设置为NULL
?怎么用?(最简单的代码示例?)取消引用空指针会导致访问冲突(在Windows上),反之则不正确。访问冲突发生在所有无效指针上,而不仅仅是空指针。此外,解决方案是不应将指向对象的指针存储在向量中。相反,存储对象的索引,或者使用一个保存指针的容器。是的,我把空指针和无效指针混淆了。我想我对向量的工作原理有误解。