指针向量中的C ++垃圾值

用户名

当我做:

for(i=0; i<size; i++){
    //create objectA here
    vectorA.push_back(objectA);
    pvectorA.push_back(&vectorA[i]);
}

pvectorA的某些元素是垃圾。但是,当我这样做时:

for(i=0; i<size; i++){
    //create objectA here
    vectorA.push_back(objectA);

}
for(i=0; i<size; i++){
    pvectorA.push_back(&vectorA[i]);
}

一切正常。为什么会这样呢?

埃雷里卡

阅读std :: vector :: push_back的文档

首先说明:

在向量的最后一个元素之后,在向量的末尾添加一个新元素。val的内容被复制(或移动)到新元素。

这有效地将容器大小增加了一个,这会导致已分配的存储空间的自动重新分配,前提是(且仅当)新向量大小超过当前向量容量时。

然后关于迭代器的有效性:

如果发生重新分配,则与容器相关的所有迭代器,指针和引用都将失效

因此,当您将对象添加到向量中时,指向该向量中的对象的所有指针都可能变为无效-除非您已保证向量具有足够capacitystd::vector::reserve

无效意味着指针不再指向有效对象,并且对其取消引用将具有未定义的行为。

在后面的代码中,在存储指针之后再也不会将对象添加到指向的向量中,因此指针是有效的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

结构向量中的垃圾值 C++

来自分类Dev

C ++中迭代器值的垃圾值

来自分类Dev

求和C ++返回的垃圾值

来自分类Dev

在 C 风格的指针值中是垃圾,但在智能指针中是正确的

来自分类Dev

C ++通过索引删除指针向量中的值

来自分类Dev

在C ++中的结构中显示垃圾值

来自分类Dev

向量push_back的垃圾值

来自分类Dev

向量push_back的垃圾值

来自分类Dev

在 c 中写入文件,垃圾值被填充

来自分类Dev

C ++结构向量,垃圾字符串值

来自分类Dev

在函数中传递地址后指向垃圾值的指针

来自分类Dev

C:打印指向数组的指针似乎也会打印垃圾值

来自分类Dev

将值推送到指针的向量具有垃圾值

来自分类Dev

SSL连接读取中的垃圾值

来自分类Dev

如何在python中获取垃圾值

来自分类Dev

写入后文件中的垃圾值

来自分类Dev

从C中的数组打印垃圾值而不是最大值

来自分类Dev

C中的指针(指针的值)?

来自分类Dev

pop_back中的垃圾值,C ++中的双链表

来自分类Dev

C、读取文本文件时字符串中的垃圾/垃圾值

来自分类Dev

指针在C中的值

来自分类Dev

C指针垃圾

来自分类Dev

free()在C代码中收集垃圾值,即使释放后将指针设置为NULL,代码也无法正常工作

来自分类Dev

C ++添加2个3D向量将返回垃圾值

来自分类Dev

从单向链表中的头部删除节点后指向垃圾值的头部指针

来自分类Dev

在openCV中访问mat中的元素时获取垃圾值

来自分类Dev

如何在C / C ++中分配垃圾值

来自分类Dev

TCP中的垃圾值和缓冲区差异

来自分类Dev

为什么在链接列表中包含垃圾值