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

问题描述 投票:0回答:1

我正在做一个赋值,我们需要使用数组表示法将随机整数分配给5x5矩阵(所以不能在这里使用指针)。在看了this关闭Stack Overflow之后没问题,我写了以下新手代码:

#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);
}

SIGSEGV分段错误发生在该行中

 matrix[i][j] = rand() % 100 + 1;

根据gdb。此外,使用backtrace我能够看到这个错误来自这里:

(gdb) backtrace
#0 0x0000000000400690 in fillMatrix (matrix=0x7fffffffe7d0) at program.c:13
#1 0x00000000004006d2 in main () at program.c:19

我的理解是,所分配的值是寻址未在矩阵中定义的存储器位置,或者根本不允许被访问。所以考虑到backtrace,这是否意味着我在主函数中声明矩阵的方式是错误的?或者我的功能fillMatrix()本身错误的问题?

提前致谢!

c matrix segmentation-fault linear-algebra sigsegv
1个回答
2
投票

你有一个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;
}
© www.soinside.com 2019 - 2024. All rights reserved.