我试图计算一个矩阵的逆矩阵,但是我的代码中出现了一个分段错误,但是我不确定在哪里以及为什么会发生这种情况
这是我的代码:
double**inverse(double*mat[],int n){
//单位矩阵
double**I=malloc(sizeof(double*)*n);
对于(int i=0;i<;n;i++)i[i]=malloc(sizeof(double)*n);
对于(int i=0;i<;n;i++){
对于(int j=0;j<;n;j++){
如果(i==j){
I[I][j]=1;
}否则{
I[I][j]=0;
}
}
}
//工作到这里
双f=0.0;
双sub=0.0;
对于(int p=0;p<;n;n++){
f=材料[p][p];
对于(int x=0;x<;n;x++){
mat[p][x]=mat[p][x]/f;
I[p][x]=I[p][x]/f;
}
对于(int i=p+1;i<;n;i++){
f=材料[i][p];
对于(int x=0;x<;n;x++){
sub=mat[p][x]*f;
mat[i][x]=mat[i][x]-sub;
sub=I[p][x]*f;
I[I][x]=I[I][x]-sub;
}
}
}
对于(int p=n-1;p>;=0;p--){
对于(int i=p-1;i>;=0;i--){
f=材料[i][p];
对于(int x=0;x<;n;x++){
sub=mat[p][x]*f;
mat[i][x]=mat[i][x]-sub;
sub=I[p][x]*f;
I[I][x]=I[I][x]-sub;
}
}
}
//返回I;
printf(“I:\n”);
对于(int i=0;i<;n;i++){
对于(int j=0;j<;n;j++){
printf(“%f”,I[I][j]);
}
printf(“\n”);
}
//免费的
对于(int i=0;i<;n;i++)自由(i[i]);
免费(I);
}
我传入的矩阵是一个nxn矩阵,每行和每列都有值。在我到达第一个for循环之前,代码似乎一直在工作,我不知道为什么会出现这个错误,因为循环停留在矩阵的边界内
您的错误似乎是这个for循环中的一个小错误
for(int p=0;p<;n;n++)
在每次迭代中,您都在增加n,而不是p,因此您最终会访问不属于自己的内存