首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在2d数组上迭代时出现分段错误

在2d数组上迭代时出现分段错误
EN

Stack Overflow用户
提问于 2014-11-17 20:50:24
回答 2查看 163关注 0票数 0

我试图做一个简单的函数,打印一个定义大小的数组。但是,在函数打印数组后,会发生seg错误。只有当boardSIZE定义为等于19或更大时,才会发生此seg故障。任何小于19的,都不会出现分割错误。有人能解释一下为什么会这样吗?或者建议我如何在这里定义一个大于20的全局变量而不产生seg错误?

代码语言:javascript
运行
复制
#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");
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-17 20:53:11

不要在循环中使用<=。使用<。对于大小为n的数组,有效索引从0转到n-1。因此,您的循环正在访问不受限制的位置。

printBoard()函数更改为:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-11-17 20:53:12

你破坏了数组的界限。

您分配了boardSIZE,这意味着可用的最大索引是boardSIZE - 1,因为第一个索引是0而不是1。因此,将<=更改为<,这两个循环和seg故障将解决!

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26981747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档