c - 循环数组会导致我的程序崩溃

标签 c arrays loops

我编写了一些程序来查看 7*7 的表格,由...... 这是工作,但由于某种原因,程序在程序结束时崩溃了。 我的编译器是 GCC,我使用的是 C99。

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
#include <string.h>
#define LENGTH 7

void printsTable(int arr[LENGTH][],int len);

int main()
{
    int table[LENGTH][LENGTH] = {0};
    int i = 0, j = 0;
    for(j = 1; j <= LENGTH; j++)
    {
        for(i = 1; i <= LENGTH; i++)
        {
            table[j][i] = pow(j,i);
        }
    }
    printsTable(table,LENGTH);
    return 0;
}

void printsTable(int arr[][LENGTH],int len)
{
    int i = 0, j = 0;
    for(i = 1; i <= LENGTH; i++)
    {
        for(j = 1; j <= LENGTH; j++)
        {
            printf("%d\t", arr[i][j]);
        }
        printf("\n");
    }
}

最佳答案

fors是不正确的。 索引从 0 开始不是来自1 ,在 数组,还有矩阵。

使用<=您正在寻址越界,属于 UB ,因为 i 的最后一个循环for 将指向table[j][7] ,以及 j 的最后一个循环将指向table[7][i] 。所有这些地址都在表分配空间之外,从table[0][0]开始。至table [6][6] .

您应该按如下方式更正您的代码

for(j = 0; j < LENGTH; j++)
{
    for(i = 0; i < LENGTH; i++)
    {
        table[j][i] = pow(j,i);
    }
}

或者,但不推荐,

for(j = 1; j <= LENGTH; j++)
{
    for(i = 1; i <= LENGTH; i++)
    {
        table[j-1][i-1] = pow(j,i);
    }
}

printsTable 也是如此函数循环。

关于c - 循环数组会导致我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35134344/

相关文章:

c - "variable"使用 C 预处理器进行长度初始化

arrays - 警告 "Simultaneous accesses to parameter ' self' ..."真的适用于此吗?

Python for 循环与或?

r - 有没有一种方法可以 dplyr (tidyverse) 映射我的数据集,找到以相同后缀结尾的列,然后只保留一个?

C 编程 - 将变量参数传递给 opendir

c - 自然对数的值

c - MPI:取消非阻塞发送

c - Mongo C驱动: Insert element into nested array

ios - 如何知道选择了哪个部分? swift

python - 对dict中所有 "key":"value"pair进行运算,并将结果存入一个新的dict对象中