我正在尝试做一个简单的函数,它打印一个定义大小的数组。但是,在函数打印数组后,发生段错误。此段错误仅在 boardSIZE 定义为等于 19 或更大时发生。任何小于 19 的值,都不会发生段错误。谁能解释这是为什么,和/或建议我如何执行类似的任务,即在此处定义大于 20 的全局变量而不会出现段错误?
#include <stdio.h>
#define boardSIZE 40
void printBoard(char [][boardSIZE]);
int main()
{
char board[boardSIZE][boardSIZE];
printBoard(board);
}
void printBoard(char board[boardSIZE][boardSIZE])
{
int i,j;
for (i=0;i<=boardSIZE;i++){
for (j=0;j<=boardSIZE;j++){
board[i][j]='X';
printf("%c",board[i][j]);
}
printf("\n");
}
}
最佳答案
不要使用 <=
在你的循环中。使用 <
.对于大小为 n
的数组, 有效索引来自 0
至 n-1
.因此,您的循环正在访问越界位置。
更改您的 printBoard()
功能:
void printBoard(char board[boardSIZE][boardSIZE])
{
int i,j;
for (i=0;i<boardSIZE;i++){
for (j=0;j<boardSIZE;j++){
board[i][j]='X';
printf("%c",board[i][j]);
}
printf("\n");
}
}
关于c - 遍历二维数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26981747/