矩阵逆中的分段错误

我试图计算一个矩阵的逆矩阵,但是我的代码中出现了一个分段错误,但是我不确定在哪里以及为什么会发生这种情况

这是我的代码:

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,因此您最终会访问不属于自己的内存

发表评论