c - 将随机元素分配给函数中的 int 二维矩阵时,如何避免 C 中的 SIGSEGV 段错误?

标签 c matrix linear-algebra segmentation-fault

<分区>

我正在做一个赋值,我们需要使用数组表示法将随机整数分配给 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,这是否意味着我在 main 函数中声明矩阵的方式是错误的?或者我的函数 fillMatrix() 本身在有问题的那一行是错误的?

提前致谢!

最佳答案

你有一个错误。在您的代码中将“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;
}

关于c - 将随机元素分配给函数中的 int 二维矩阵时,如何避免 C 中的 SIGSEGV 段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54918372/

相关文章:

r - 在 R 中传递大型矩阵的替代方法

使用指针的 C 矩阵乘法

matlab - 单应性投影变换

c++ - 在 CUDA 中求解稀疏正定线性系统

高斯乔丹消除的 C++ 程序返回一个非常小的值,但不是 0

c - (动态内存分配)为什么最大化峰值利用率?

c - 如何从C中的单个文件中提取多个字符串

c - 为什么使用 arcsin 的泰勒级数公式在 x = 1 时收敛得如此之快

c - 为结构中的双指针分配内存时遇到问题

javascript - WebGL 渲染优化 - 矩阵