它似乎看起来非常简单,但是char数组看似随机的点不能正确填充8。也没有编译器错误。对不起,这是一个非常棒的问题,但是当我一个月前设计一个数独求解器时,运行与此几乎相同的代码没有任何问题。
#include <iostream>
using namespace std;
int main () {
//Initiates initial board.
char board[30][27];
//Fills entire board with b's to represent the edges of the board where the pac-man cannot go.
for (int control=0; control<31; control++) {
for (int control2=0; control2<28; control2++) {
board[control][control2]='8';
}
}
//Code here filling the board with spaces representing where the pac-man can go.
//Temporary render of board.
for (int control=0; control<31; control++) {
for (int control2=0; control2<28; control2++) {
cout << board[control][control2];
}
cout << endl;
}
return 0;
}
显然有一个随机分段错误。
答案 0 :(得分:5)
分段错误几乎不是随机的。你正在超越阵列的界限。 board[30]
和董事会[] [28]各自超出各自维度。在这种情况下,您可能会覆盖main()
的返回地址,因此您的程序会进入杂草,然后就像您在分段故障中看到的那样死亡。将您的循环条件更改为:
control < 30
和
control2 < 27
你应该没事。您还可以将数组的大小更改为board[31][28]
。
最重要的是,您还应该学会使用调试器,您可以使用它来查找失败时control
和control2
变量的值,哪个会解决这个问题,而不必在这里问。
答案 1 :(得分:3)
您正在索引超过数组的最大值。
您可以在board
上执行的最大索引是board[29][26]
,因为您放置的30和27是元素数量,数组是零索引。
答案 2 :(得分:3)
你超出了矩阵的大小。你有:
char board[30][27];
但你的循环是:
for (int control=0; control<31; control++) {
for (int control2=0; control2<28; control2++) {
他们会将每个维度超过1。
因此,要么将矩阵更改为:char board[31][28];
,要么从循环中删除迭代。