当在函数中将随机元素分配给int 2D矩阵时,如何避免C中的SIGSEV分段错误?

当在函数中将随机元素分配给int 2D矩阵时,如何避免C中的SIGSEV分段错误?,c,matrix,linear-algebra,segmentation-fault,C,Matrix,Linear Algebra,Segmentation Fault,我在做一个赋值,我们需要使用数组符号将随机整数赋值给5x5矩阵,所以这里不能使用指针。在查看了closed Stack Overflow non question之后,我编写了以下新手代码: #include<stdio.h> #include<stdlib.h> #include<time.h> #define rows 5 #define cols 5 void fillMatrix(int matrix[rows][cols]) { sran

我在做一个赋值,我们需要使用数组符号将随机整数赋值给5x5矩阵,所以这里不能使用指针。在查看了closed Stack Overflow non question之后,我编写了以下新手代码:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define rows 5
#define cols 5

void fillMatrix(int matrix[rows][cols])
{
    srand(time(NULL));
    for(int i = 0; i<rows; i++)
        for(int j = 0; i<cols; j++)
            matrix[i][j] = rand() % 100 + 1;
}

int main()
{
    int matrix[rows][cols];
    fillMatrix(matrix);
}
根据gdb。此外,使用回溯,我能够看到这个错误是由以下原因引起的:

(gdb) backtrace
#0 0x0000000000400690 in fillMatrix (matrix=0x7fffffffe7d0) at program.c:13
#1 0x00000000004006d2 in main () at program.c:19
我的理解是,分配的值是寻址矩阵中未定义或根本不允许访问的内存位置。考虑到回溯,这是否意味着我在主函数中声明矩阵的方式是错误的?或者我的函数本身在所讨论的行中是错误的


提前谢谢

你有一个bug。将代码中的i更改为j

void fillMatrix(int matrix[rows][cols])
{
    srand(time(NULL));
    for(int i = 0; i<rows; i++)
        for(int j = 0; i<cols; j++)     << here is a bug
            matrix[i][j] = rand() % 100 + 1;
}

这个问题应该以打字错误的形式结束,不值得为这样的简单错误发布完整的答案。可以用评论来回答。
void fillMatrix(int matrix[rows][cols])
{
    srand(time(NULL));
    for(int i = 0; i<rows; i++)
        for(int j = 0; i<cols; j++)     << here is a bug
            matrix[i][j] = rand() % 100 + 1;
}