>我正在尝试在 C++ 中找到矩阵的行列式,在运行代码时,发生了分段错误(核心转储(,尽管我多次尝试更改代码,但这个问题仍然存在. 这是代码:
#include <iostream>
using namespace std;
const int N = 4;
void get_cofs(int mat[N][N], int temp[N][N], int p, int q, int n){
int i,j;
for (int row=0; row<n; row++){
for (int col=0; col<n; col++){
if (row != p && col != q){
temp[i][j++] = mat[row][col];
if (j == n-1){
j = 0;
i++;
}
}
}
}
}
int compute_determinant(int mat[N][N], int n){
int D =0;
if (n == 1){
return mat[0][0];
}
int temp[N][N] {0};
int sign =1;
for (int i = 0; i < n; i++)
{
get_cofs(mat,temp,0,i,n);
D += sign * mat[0][i] * compute_determinant(temp, n-1);
sign = -sign;
}
return D;
}
int main(){
int mat[4][4] {{1, 0, 2, -1},
{3, 0, 0, 5},
{2, 1, 4, -3},
{1, 0, 5, 0}
};
cout<<compute_determinant(mat, N)<<endl;
return 0;
}
就像@TrebledJ说的,i 和 j 是未初始化的。使用未初始化的变量会导致未定义的行为。请参阅此内容以获取完整的治疗。
对于您的特定情况,请将int i,j;
更改为int i=0,j=0;
,它将停止段错误。