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



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

下面是一个在整数上使用指针的示例,它显示了与带有对象的版本相同的错误:一次迭代后的分段错误(核心转储(。

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之前超出范围,您将有悬而未决的参考。

相关内容

  • 没有找到相关文章

最新更新