int main(int argc, char argv)
{
int myarray[] = {1, 2, 3, 5};
std::vector<int> array(myarray, myarray + 4);
std::vector<int> *p = testvector(array);
std::vector<int>::const_iterator it;
for(it=p->begin(); it != p->end(); ++ it)
{
printf("%d ", *it);
}
return 0;
}
std::vector<int> *testvector(std::vector<int> array)
{
return &array;
}
以上是我的测试代码;有什么错误,它返回0 0 3 5而不是1 2 3 5
答案 0 :(得分:3)
仔细看var directoryListView = new DirectoryListView({ collection: directory })
。这是输入参数std::vector<int> *testvector(std::vector<int> array)
的深层复制。
array
超出范围后,返回的指针将悬空。取消引用该指针的行为将是未定义。这就是你的程序表现奇怪的原因。
有趣的是,如果您已将array
作为参数编写(即通过引用传递),那么这将有效,因为您将返回指向{{中定义的向量的指针1}}!这段代码虽然非常脆弱。
答案 1 :(得分:0)
这样:
std::vector<int> *testvector(std::vector<int> array)
应替换为:
std::vector<int> *testvector(std::vector<int>& array)
但是,这不是一个真正的解决方案,因为您的示例没有意义。我认为你有一个X问题,而你只是张贴了Y问题。如果你发布真正的问题,它会更容易帮助你。
答案 2 :(得分:0)
更改
std::vector<int> *testvector(std::vector<int> array)
到
std::vector<int> *testvector(std::vector<int>& array) // Note the &
否则数组被复制到一个局部变量,该变量在testvector()
结束时被销毁,这使得返回的指针无效。