我在简单的C ++程序中遇到了复制方法的问题。 每次我打电话给副本:
Sudoku::SudokuNode** Sudoku::copy(SudokuNode** sudokuBoard)
{
SudokuNode** tempSudokuBoard = new SudokuNode*[9];
for(int i = 0; i<9; i++)
{
tempSudokuBoard[i] = new SudokuNode[9];
for(int j = 0; j<9; j++)
{
tempSudokuBoard[i][j].currentInteger = sudokuBoard[i][j].currentInteger;
for(vector<int>::iterator iter = sudokuBoard[i][j].possibleIntegers.begin(); iter!= sudokuBoard[i][j].possibleIntegers.end();)
{
tempSudokuBoard[i][j].possibleIntegers.push_back(*iter);
}
}
}
return tempSudokuBoard;
}
该程序似乎完全停止,没有返回可见错误。
如果我尝试调试程序,调试器工作正常,直到我到达复制方法。然后调试器显示一个对话框,说明:
当前位置没有可用的源代码。
知道出了什么问题吗?
答案 0 :(得分:6)
for(vector<int>::iterator iter = sudokuBoard[i][j].possibleIntegers.begin(); iter!= sudokuBoard[i][j].possibleIntegers.end();)
你似乎没有推进该循环中的迭代器,所以它永远不会结束。将++iter
添加到计数表达式中(在最后一个;在for循环中)。
至于为什么调试器无法找到该位置的源,这取决于平台。您使用的调试器是什么?
答案 1 :(得分:2)
你没有增加内部循环的迭代器:
for(vector<int>::iterator iter = sudokuBoard[i][j].possibleIntegers.begin(); iter!= sudokuBoard[i][j].possibleIntegers.end(); ++iter)
产生一个infinate for循环(编译器知道这个并“优化”它为无限循环,这就是为什么没有代码可用的原因。)
答案 2 :(得分:0)
我建议您重新编码以使用...
class SudokuBoard
{
SudokuNode nodes[9];
};