繁体   English   中英

C++:在 push_back 时迭代指针向量时出现分段错误

[英]C++: Segmentation fault while iterating over vector of pointers while push_back

我想遍历指向对象的指针向量。 在迭代时,我必须 push_back 指向向量的新指针。 在循环之前,push_backs 的数量是未知的,也没有中止条件,所以我不能使用 while 循环。

这是一个使用整数指针的示例,它显示了与带有对象的版本相同的错误:Segmentation fault (core dumped) after one iteration。

vector<int*> vec;
int a = 43;
vec.push_back(&a);

for (vector<int*>::iterator it = vec.begin(); it != vec.end(); ++it) {
    cout << *(*it) << " " << *it << endl;
    vec.push_back(&a);
}

相同的代码但使用整数效果很好。

vector <int>vec;
int a = 43;
vec.push_back (a);

for (vector < int >::iterator it = vec.begin (); it != vec.end (); ++it){
    cout << (*it) << " " << *it << endl;
    vec.push_back (a);    
}

push_back在追加结果时使迭代器无效, size > capacity ,因此它重新分配并复制到新空间。

将给定的元素值附加到容器的末尾。

1) 新元素被初始化为值的副本。

2) 值被移动到新元素中。

如果新的 size() 大于 capacity() 则所有迭代器和引用(包括过去的迭代器)都将失效。 否则只有过去的迭代器无效。

另外,正如@Jesper 指出的那样,您正在vector中存储对局部变量的引用:

int a = 43; 
vec.push_back(&a);

如果在您的vector之前退出 scope,您将有悬空引用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM