【发布时间】:2020-02-07 00:47:22
【问题描述】:
我想遍历指向对象的指针向量。在迭代时,我必须 push_back 指向向量的新指针。在循环之前,push_backs的数量是未知的,也没有abort条件,所以不能使用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);
}
【问题讨论】:
-
vec.push_back(&a);将即将超出范围(然后将是无效)的局部变量的地址推送到向量。这不太可能是你想要的。 -
感谢您的回答。在我的代码中,我想使用这个循环来替换递归。我会推回对象上的指针,而不是整数指针。我将切换到 std::stack。
标签: c++ for-loop pointers segmentation-fault