C-为什么我会得到细分故障[139]



我认为标题很明显。

我正在尝试创建一个程序,该程序使用行列式计算3x3线性系统,但我会得到分割错误。这是代码:

#include<stdio.h>
int determinant(int n, int m, int det[m][n])
{
    int res;
    res = det[0][0]*det[1][1] - det[0][1]*det[1][0];
    return res;
}
int main(void)
{
    int arr[3][4], det[2][2], i, j, D; //Dx1, Dx2, Dx3
    for(i = 0; i < 3; i++)
    {
        printf("Eisagete tous suntelestes ths %dhs eksisoshs.", i+1);
        scanf("%d %d %d %d", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3]);
    }
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 2; i++)
        {
            det[i][j] = arr[i+1][j+1];
        }
    }
    D = arr[0][0]*determinant(2, 2, det);
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 2; i++)
        {
            det[i][j] = arr[i+1][j+((j == 1) ? 1 : 0)];
        }
    }
    D -= arr[0][1]*determinant(2, 2, det);
    for(i = 0; i < 2; i++)
    {
        for(j = 0; j < 2; i++)
        {
            det[i][j] = arr[i+1][j];
        }
    }
    D += arr[0][2]*determinant(2, 2, det);
    printf("%dn", D);
}

我在完成main中的第一个for循环后立即遇到错误。

在块中:

for(i = 0; i < 2; i++)
{
    for(j = 0; j < 2; i++)
    {
        det[i][j] = arr[i+1][j+1];
    }
}

您在两个循环中都会增加i,并在从数组中读取时增加1个。因此,在arr[i+1],您正在阅读到远处。

基本上的细分故障意味着您正在尝试阅读您无法访问的东西。

您永远不会通过传递静态数组大小mn作为函数参数来做的事情:

int determinant(int n, int m, int det[m][n])

检查https://gcc.gnu.org/onlinedocs/gcc/variable-length.html信息

相关内容

  • 没有找到相关文章