我有一个返回类向量的函数:
vector<movement> returnMoves(int startx, int starty, int bb[][8], int side){
vector<movement> moves;
movement adding;
moves.push_back(adding); moves.push_back(adding); //example
return moves;
}
我从主要方面以这种方式调用函数:
vector<movement> t1;
t1 = returnMoves(startx, starty, bb, 1);
它有效,但是这个过程已经进行了很多次,而且速度很慢,所以我想让它更快,所以我考虑通过引用或指针返回: 这就是我试过的:
vector<movement> & returnMoves(int startx, int starty, int bb[][8], int side){
vector<movement> temp1;
vector<movement>& moves = temp1;
moves.push_back(adding); moves.push_back(adding);
return moves;
}
并以同样的方式调用它:
t1 = returnMoves(startx, starty, bb, 1);
它给我一个分段错误,我做错了什么?
答案 0 :(得分:3)
您正在返回对局部变量的引用。 temp1
退出后变量returnMoves
超出范围,导致未定义的行为。如果你想避免复制,你可以简单地传入你想要填充的对象:
void generateReturnMoves(vector<movement>& populateThis, int startx, int starty, int bb[][8], int side){
//Add all the movement objects you need to populateThis
}
现在,您可以将其用作:
vector<movement> t1;
generateReturnMoves(t1, startx, starty, bb, 1);