Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当结构增长时,指向向量中元素的指针被设置为NULL_C++_Arrays_Pointers_Vector - Fatal编程技术网

C++ 当结构增长时,指向向量中元素的指针被设置为NULL

C++ 当结构增长时,指向向量中元素的指针被设置为NULL,c++,arrays,pointers,vector,C++,Arrays,Pointers,Vector,指向对象的指针被设置为NULL,尽管函数中的任何地方都没有pointerToObj=NULL。稍后,我将该指针用于某个对象,它会导致访问冲突异常。我还添加了一个测试指针,以查看它是否会保留其值,但否-两者都会同时设置为NULL 指针指向向量中的对象。在某一点上,我向向量添加了一个新对象,因此结构会增长。紧接着,指针被设置为NULL。我测试了这个-所有指向向量某个元素的指针,在我添加新对象后立即设置为NULL 我怀疑这是因为向量的工作方式——如果我没有弄错的话,它们是基于堆栈的。当堆栈必须加长自身

指向对象的指针被设置为NULL,尽管函数中的任何地方都没有
pointerToObj=NULL
。稍后,我将该指针用于某个对象,它会导致访问冲突异常。我还添加了一个测试指针,以查看它是否会保留其值,但否-两者都会同时设置为NULL

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

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


真的是这样吗?

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

std::vector
并不像您描述的那样工作,外部指针被设置为null。您需要发布此行为的代码。您是否验证了指针实际上已设置为
NULL
?怎么用?(最简单的代码示例?)取消引用空指针会导致访问冲突(在Windows上),反之则不正确。访问冲突发生在所有无效指针上,而不仅仅是空指针。此外,解决方案是不应将指向对象的指针存储在
向量中。相反,存储对象的索引,或者使用一个保存指针的容器。是的,我把空指针和无效指针混淆了。我想我对向量的工作原理有误解。