动态内存分配后,C ++程序暂停

时间:2009-10-05 19:26:58

标签: c++

我在简单的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;
}

该程序似乎完全停止,没有返回可见错误。

如果我尝试调试程序,调试器工作正常,直到我到达复制方法。然后调试器显示一个对话框,说明:

当前位置没有可用的源代码。

知道出了什么问题吗?

3 个答案:

答案 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];
};