while循环中的C ++分段错误

时间:2015-12-05 04:11:11

标签: c++ segmentation-fault

出于某种原因,我在我的代码中的while循环中得到了一个分段错误,以回溯一个2d矩阵。我尝试添加许多条件以确保矩阵永远不会访问未识别的值。这是代码,非常感谢任何帮助!

  i = sizeA;
  j = sizeB;

  std::string op[sizeA];

  std::string mat = "match ";
  std::string del = "delete ";
  std::string ins = "insert ";
  std::string sub = "substitute ";

  int k = sizeA;

  bool stop = false;

  while (!stop)
  {
    if ((i == 0) && (j != 0))
    {
      op[k] = (ins + B[j]);
      j = (j - 1);
    }
    else if ((j == 0) && (i != 0))
    {
      op[k] = (del + A[i]);
      i = (i - 1);
    }
    else
    {
      if (smallest(costMatrix[i-1][j], costMatrix[i][j-1], costMatrix[i-1][j-1]) == costMatrix[i-1][j])  //deletion
      {
        op[k] = (del + A[i]);
        i = (i - 1);
      }
      else if (smallest(costMatrix[i-1][j], costMatrix[i][j-1], costMatrix[i-1][j-1]) == costMatrix[i][j-1])  //insertion
      {
        op[k] = (ins + B[j]);
        j = (j - 1);
      }
      else  //substitution or match
      {
        if (costMatrix[i-1][j-1] == costMatrix[i][j])  //match
        {
          op[k] = (mat + A[i]);
        }
        else  //substitution
        {
          op[k] = (sub + B[j]);
        }

        i = (i - 1);
        j = (j - 1);
      }
    }

    if ((i == 0) && (j == 0))
      stop = true;

    k = (k - 1);
  }

1 个答案:

答案 0 :(得分:0)

在循环的第一次迭代中分配op[k]时,您有k==sizeA,但opsizeA的数组,因此此访问会导致未定义的行为,很可能导致分段错误。