首页 > 解决方案 > 为什么我的代码给出分段错误(核心转储)错误?

问题描述

我想用 0 初始化一个 5x5 数组作为每个数组索引的内容。但是每当我运行我的代码时,我都会遇到分段错误(核心转储错误)。你能帮我看看我的代码有什么问题吗?我的代码如下。

#include <stdio.h>
int main()
{
    int a[5][5];
    int i,j;
    for(i=0; i<=5; i++)
    {
        for(j=0; j<=5; j++)
        {
            a[i][j]=0;
        }
    }
}

标签: carraysmultidimensional-array

解决方案


您有一个包含 5 行(索引 0..4)和 5 个列(索引 0..4)的数组,但您正在访问 6 行(索引 0..5)和 6 个列(索引 0..5)。您需要调整循环的边界。

#define ROWS 5
#define COLS 5

int a[ROWS][COLS];
for (int i=0; i<ROWS; ++i) {
    for (int j=0; j<COLS; ++j) {
        a[i][j] = 0;
    }
}

也就是说,您可以简单地使用以下内容来初始化数组:

#define ROWS 5
#define COLS 5

int a[ROWS][COLS] = { 0 };

请注意,我使用了名称,而不是在任何地方对数字进行硬编码。这更具可读性并且更不容易出错。


推荐阅读