考虑这段代码。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector <int *> test;
vector <int *> v;
int *a = new int;
int *b = new int;
*a = 1;
*b = 2;
v.push_back (a);
v.push_back (b);
for (int i = 0; i < 2; ++i)
{
int n = *v[i];
test.push_back (&n);
}
cout << *test[0] << " " << *test[1] << endl;
delete a;
delete b;
return 0;
}
问题的陈述是:
“给定这段代码,回答以下问题:
为什么“测试” vector 只包含 2?
我们如何更改 for 循环以正确复制(仅 for 循环内的代码)?”
我无法回答这些问题中的任何一个,因此不胜感激。
提前致谢。
最佳答案
该代码引入了悬挂指针。循环体如下所示:
{
int n = *v[i];
test.push_back (&n);
}
一旦循环体结束,局部变量 n
就失去作用域,因此指针 &n
现在是一个悬空指针。如果碰巧 test
只包含 2,那正是 undefined behavior 随机产生的结果。
如果您想“正确地”将数据复制到test
,您可以将for
循环体更改为:
{
int* n = new int;
*n = *v[i];
test.push_back (n);
}
请对“正确”持保留态度...
关于c++ - 将值从一个 vector 复制到另一个 vector (来自书籍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597231/