如何摆脱C ++中的分段错误错误?



>我正在尝试在 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;,它将停止段错误。

相关内容

  • 没有找到相关文章