为什么我会出现分段错误[139]?

时间:2016-12-17 15:53:33

标签: c segmentation-fault

我认为标题很清楚。
我正在尝试创建一个使用行列式计算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("%d\n", D);
}

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

2 个答案:

答案 0 :(得分:0)

在街区:

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],你正在阅读。

分段错误基本上意味着您正在尝试阅读您无权访问的内容。

答案 1 :(得分:0)

通过将静态数组大小mn作为函数参数传递,你永远不会做你正在做的事情:

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

检查https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html以获取信息