不断得到分段错误:11,我不确定为什么

Keep getting Segmentation fault: 11 and Im unsure why?

本文关键字:不确定 为什么 错误 分段      更新时间:2023-10-16

我需要创建一个程序,该程序在矩阵中从命令行中查找单词,然后将它们着色为红色。这是从左到右阅读单词的第一部分。我不断收到分段错误:int main 中第二个嵌套的 for 循环中有 11 个。我知道我不称函数为"正确",但这不应该影响分段错误,不是吗?任何帮助不胜感激,非常感谢!

#include "colormod.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(int argc, char *argv[]){
  Color::Setting red(Color::FG_RED);
  Color::Setting def(Color::FG_DEFAULT);
  for(int i = 0; i < argc; i++){
    argv[i];
  }
  int x, y;
  cin >> x >> y;
  vector < vector < char > > matrix;
  matrix.resize(x);
  for(int i = 0; i < matrix.size(); i++){
    matrix[i].resize(y);
    for(int k = 0; k < matrix.size(); k++){
      cin >> matrix[i][k];
    }
  }
//THIS IS WHERE THE SEGMENTATION FAULT IS
vector < vector < bool > > empty;
for(int i = 0; i < matrix.size(); i++){
  for(int k = 0; k < matrix.size(); k++){
    if(empty[i][k] == true){
      cout << red << matrix[i][k] << def << " ";
    }
    else{
      cout << matrix[i][k] << " ";
    }
  }
  cout << endl;
 }
}
//THIS IS WHERE THE SEGMENTATION FAULT ENDS
void right(vector < vector < char > > &matrix, vector < vector < bool > > &empty, char *word, int x, int y){
  bool check = false;
  int count = 0;
  int wordLength = strlen(word);
  for(int i = 0; i < wordLength; i++){
    if(y < matrix.size()){
      if(word[i] == matrix[x][y]){
        count++;
      }
    }
    y++;
  }
  if(count == wordLength) check = true;
  if(check){
    y = y - wordLength;
    for(int i = 0; i < wordLength; i++){
      if(y < matrix.size()){
        if(word[i] == matrix[x][y]){
          empty[x][y] = true;
        }
      }
      y++;
    }
  }
}
vector < vector < bool > > empty;

创建一个空向量。 然后你尝试访问其中的元素

if(empty[i][k] == true)

由于向量中没有任何内容,因此这将是未定义的行为和分割错误的原因。

您还对 for 循环中的嵌套循环使用了错误的大小。 您正在使用外部向量大小作为内部向量的大小,该大小可能正确,也可能不正确。 您的 for 循环应如下所示

for(int i = 0; i < matrix.size(); i++)
    for(int k = 0; k < matrix[i].size(); k++)

或者你可以使用基于范围的循环,如

for (auto& row : matrix)
{
    //now row is one row of the outer vector 
    for (auto& col : row)
    {
        // now col is one element in the row
    }
}