迭代2d数组时的段错误

时间:2014-11-17 20:50:24

标签: c global-variables

我正在尝试一个简单的函数,它打印一个定义大小的数组。但是,在函数打印数组后,会发生seg错误。仅当boardSIZE定义为等于或大于19时,才会发生此seg故障。任何小于19的东西,都不会出现分段错误。任何人都可以解释为什么这是,和/或建议我如何执行类似的任务来定义一个大于20的全局变量而不会出现seg错误?

#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");
    }
}

2 个答案:

答案 0 :(得分:2)

请勿在循环中使用<=。使用<。对于大小为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");
    }
}

答案 1 :(得分:2)

你吹掉阵列界限。

您分配了boardSIZE,这意味着可用的最大索引是boardSIZE - 1,因为第一个索引是0而不是1。所以在两个for循环中将<=更改为<,并且seg错误将解决!

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");
    }

我建议您将标题编辑为更合适的标题,因为这与全局变量没有任何关系