C++ 当我编译我的程序时,它显示“分段错误(或)分段错误(内核转储)

C++ 当我编译我的程序时,它显示“分段错误(或)分段错误(内核转储),c++,knights-tour,C++,Knights Tour,当我编译我的程序时,它显示 分段故障或分段故障 我的代码似乎在工作有时它给出了骑士在整个棋盘上移动的次数,当在从所有其他路径中随机选择的一个正方形上移动时,骑士可能可以移动,但这似乎并不总是工作只是为了简单起见,我使用了5x5棋盘,为什么会发生这种情况,我可以做些什么来修复它 包括 包括 包括 包括 使用名称空间std; int main { 数组棋盘={}; 数组水平={2,1,-1,-2,-2,-1,1,2}; 数组垂直={1,-2,-2,-1,1,2,2,1}; 数组温度={}; 整数计数

当我编译我的程序时,它显示

分段故障或分段故障

我的代码似乎在工作有时它给出了骑士在整个棋盘上移动的次数,当在从所有其他路径中随机选择的一个正方形上移动时,骑士可能可以移动,但这似乎并不总是工作只是为了简单起见,我使用了5x5棋盘,为什么会发生这种情况,我可以做些什么来修复它

包括 包括 包括 包括 使用名称空间std; int main { 数组棋盘={}; 数组水平={2,1,-1,-2,-2,-1,1,2}; 数组垂直={1,-2,-2,-1,1,2,2,1}; 数组温度={}; 整数计数=0,t=0,索引; int cR=4,cC=4,平方=1; srandstatic_casttime0; 做 { t=0; forsize_t i=0;i<8;i++ { cR+=垂直[i]; cC+=水平[i]; 如果cR>0&&cR<8&&cC>0&&cC<8&&chessBoard[cR][cC]!=-1 { 温度[t]=i; t++; } cR-=垂直[i]; cC-=水平[i]; } ift>0 { 指数=兰特%t; 棋盘[cR][cC]=-1; cR+=垂直[温度[指数]]; cC+=水平[温度[指数]]; 计数++; } forsize_t j=0;j
array<array<int , 5>,5> chessBoard = {};

分段错误是指程序试图访问不允许访问的内存


编译时不会发生这种情况,但运行程序时会发生这种情况。

指针出现问题。可能是因为您声明的棋盘大小仅为5x5,但您正在将行和列与8进行比较。您正在访问负索引:cR+=垂直[i];cC+=水平[i];只是一个旁注。请仔细检查segfault何时发生,这是一个非常重要的信息。如果你编译了你的程序并得到了一个segfault,那么你对一个正确的编译器做了一些严重的错误,或者有一个错误的编译器-任何类型的代码都可能有更大的错误,不管它是多么怪异和不完整。但是在实际执行自己的程序之前,即编译和构建代码的结果之前,不要获取SEGFULT。
array<array<int,8>,8> chessBoard;