首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码会给出分段错误(核心转储)错误?

为什么我的代码会给出分段错误(核心转储)错误?
EN

Stack Overflow用户
提问于 2020-05-13 00:49:35
回答 4查看 59关注 0票数 0

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

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

回答 4

Stack Overflow用户

发布于 2020-05-13 01:00:10

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

代码语言:javascript
复制
#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;
    }
}

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

代码语言:javascript
复制
#define ROWS 5
#define COLS 5

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

请注意,我使用的是名称,而不是到处硬编码的数字。这更具可读性,也更不容易出错。

票数 3
EN

Stack Overflow用户

发布于 2020-05-13 00:57:20

对于C中的数组,索引从0开始。

当我们声明一个数组a[5]时,这显然表明我们正在为a分配某些数据类型的5内存空间,访问这些内存地址的一种方法是使用索引。正如我之前所说的,在C中,索引从0开始,这5个空格将是:

代码语言:javascript
复制
  1     2     3     4     5    <--------- Actual position
a[0]  a[1]  a[2]  a[3]  a[4]   <--------- Array index

因此,当我们尝试访问上面示例中的a[5]时,这将导致分段错误。

同样,对于您的情况,您应该像下面这样更正for循环:

代码语言:javascript
复制
for (i = 0; i < 5; i++) {
    for (j = 0; j < 5; j++) {
        a[i][j] = 0;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2020-05-13 01:19:02

问题出在<<=安装上

它将循环6次,并在2d数组中的每个a[i][j]中设置0

它将从a[0][0]开始到a[5][5]

但是你给hem分配了5个立方体的内存(0,1,2,3,4,它从0开始,而不是1),循环集有6个立方体(0,1,2,3,4,5),但是5不在数组中,所以你有一个分段错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61757325

复制
相关文章

相似问题

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