我认为标题很清楚。
我正在尝试创建一个使用行列式计算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
循环后立即收到错误。
答案 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)
通过将静态数组大小m
和n
作为函数参数传递,你永远不会做你正在做的事情:
int determinant(int n, int m, int det[m][n])
检查https://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html以获取信息