C++ 为什么我得到运行时错误:加载类型为'_位u型';(stl_bvector.h)?

C++ 为什么我得到运行时错误:加载类型为'_位u型';(stl_bvector.h)?,c++,C++,有人能告诉我为什么我得到这个代码的错误吗?错误在第81行的花支架上 Error: runtime error: load of null pointer of type '_Bit_type' (stl_bvector.h) 我不知道为什么会出现这个错误。问题是单词搜索。我熟悉Python,是C++初学者。 #include<bits/stdc++.h> using namespace std; class Solution { public: int h=0; v

有人能告诉我为什么我得到这个代码的错误吗?错误在第81行的花支架上

Error: runtime error: load of null pointer of type '_Bit_type' (stl_bvector.h)
我不知道为什么会出现这个错误。问题是单词搜索。我熟悉Python,是C++初学者。
#include<bits/stdc++.h>
using namespace std;
class Solution {
public:
    int h=0;
    vector<vector<bool>> visited;
    void see(int i,int j,int m,int n,string word,vector<vector<char>> &board,int l){
        if(l==word.size()){

                h=1;
                //cout<<s<<endl;


            return;
        }
        if(i-1>=0 and i-1<m and j>=0 and j<n){


            if(visited[i-1][j]==false){
            visited[i-1][j]=true;    

            this->see(i-1,j,m,n,word,board,l+1);
            visited[i-1][j]=false ;       
            }


        }
        if(i>=0 and i<m and j+1>=0 and j+1<n){

            if(visited[i][j+1]==false){
                visited[i][j+1]=true;

            this->see(i,j+1,m,n,word,board,l+1);
            visited[i][j+1]=false  ;      
            }

        }
        if(i+1>=0 and i+1<m and j>=0 and j<n){

            if(visited[i+1][j]==false){
                visited[i+1][j]=true;

            this->see(i+1,j,m,n,word,board,l+1);
            visited[i+1][j]=false      ;  
            }
        }
        if(i>=0 and i<m and j-1>=0 and j-1<n){

         if(visited[i][j-1]==false){
             visited[i][j-1]=true;

            this->see(i,j-1,m,n,word,board,l+1);
            visited[i][j-1]=false     ;   
            }

        }


    }

    bool exist(vector<vector<char>>& board, string word) {
        visited.resize(board.size());
        for(int i=0;i<board.size();i++){
            for(int j=0;j<board[0].size();j++){
                visited[i][j]=false;
            }
        }

        int m=board.size(),n=board[0].size();
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                if(board[i][j]==word[0]){
                    visited[i][j]=true;

                    this->see(i,j,m,n,word,board,1);
                    if(h==1){
                        return(true);
                    }
                    visited[i][j]=false;
                }
                }
        }
        return(false);

    }
};
#包括
使用名称空间std;
类解决方案{
公众:
int h=0;
访问的病媒;
void see(int i、int j、int m、int n、字符串字、向量和棋盘、int l){
if(l==word.size()){
h=1;
//cout=0,i=0,j-1见(i,j-1,m,n,字,板,l+1);
访问[i][j-1]=错误;
}
}
}
bool exist(向量和板、字符串字){
.resize(board.size());

对于(int i=0;i而言,问题在于
exist
函数中。您从
visitored.resize()
开始,它将调整
visitored
的大小,使
board.size()
具有空向量。当您尝试在下面的循环中写入
visitored[i][j]
时,您将收到此错误

最简单的修复方法是在调整访问的
大小时创建所有子向量:

visited.resize(board.size(), vector<bool>(board[0].size());
.resize(board.size(),vector(board[0].size());
不过,这确实有一个问题:如果
board
为空,那么您将访问所有子向量的默认值

一旦有了这些,就不需要以下循环,因为向量的所有元素都将设置为
false


也可以将声明用于<代码> M< /C> >代码> N>代码>到<>代码> < <代码>,并在调整大小<代码>访问 .< /P>时使用它们:无关:程序的前两行将它置于极易受攻击的位置。第一行包括整个C++标准库。这是很多东西,而你是U。几乎什么都不唱。这大大降低了构建时间,并给您留下了大量需要避免的标识符。幸运的是,它们都在
std
命名空间中,它们是安全的。除了第二行之外,
std
命名空间中的所有内容都与您在全局命名空间中定义的内容冲突。This非常危险。单字母变量命名使此代码比必要时更难阅读。单字母变量几乎不包含有关变量表示的内容以及如何使用的上下文信息,并且很容易意外地用一个变量替换另一个变量,同时也很难识别t他意外地被替换了。