QMの固有値問題のためにJacobisメソッドをプログラミングしていますが、C++を始めたばかりですが、ダブルポインターを使用して行列を作成したいのですが、ダブルポインターにアクセスするとセグメンテーションフォールトが発生する
私はmain()
を読めない行で混乱させたくありません(他の人はこのコードを読む必要があります)ので、問題をサブ関数に分割したいと考えていました。私はダブルポインタをとり、行列を返す関数を作ったが、なぜ関数の外でそれにアクセスできないのだろうか?私のコードsegfaults(以下に記入)私がしようとすると。 main()の外に行列を構築するにはどうすればよいですか?まだmain()
にアクセスできますか?
enter code her enter code here
int i, j, k;
//== BEGIN MAIN ==//
int main()
{
//Constants and variables
double **A;
double epsilon = pow((double)10, double(-8)); //The convergence limit for jacobis method
int N = 10; //Dimension of matrix
char test[] = "test";
cout <<"The inner matrix function:"<<endl;
makematrix(N, A);
cout<<endl<<"The outer matrix function:"<<endl;
//This part segfaults
for(i=0; i<N; i++)
{
cout<<endl;
for(j=0; j<N; j++)
{
cout<<A[i][j]<<" ";
}
}
return 0;
}
//== END MAIN ==//
//==Begin function definitions==//
void makematrix(int N, double **A)
{
//Function for initializing our tridiagonal matrices for jacobis method
A = new double*[N];
for(i=0; i<N; i++)
{
A[i] = new double[N];
}
for(i=0; i<N; i++)
{
for(j=0; j<N; j++)
{
A[i][j] = 0;
}
}
//Prints the matrix declared here
for(i=0; i<N; i++)
{
cout<<endl;
for(j=0; j<N; j++)
{
cout<<A[i][j]<<" ";
}
}
cout <<endl;
return;
}
値10^-8 'pow'を使用して計算されていませんが、その代わりに一定' 1E-8' –