问题描述
我有以下代码,由于 read access violation
而失败:
#include <vector>
using namespace std;
vector<int>::iterator myIterator;
void foo(vector<int> vec) {
myIterator = vec.begin();
}
int main()
{
foo({ 10,20,30,40 });
*myIterator; // Here it fails.
return 0;
}
经过一些调试,我发现当函数 myIterator
完成时,foo()
变得无效。
那我做错了什么?
解决方法
vec
仅在 foo
的范围内定义。由于 myIterator
是指向 vec
的迭代器,因此它在 foo
之外不再有效。尝试取消引用此类迭代器会引发读取访问冲突。
您需要在某处定义 vec
(例如在 main
中),然后在 foo
中传递对它的引用,例如:
void foo(vector<int>& vec) {
myIterator = vec.begin();
}
int main() {
vector<int> vec = {10,20,30,40};
foo(vec);
*myIterator;
return 0;
}