-1

私はC++が初めてです。

class ProjectionValue{
public:
    int angleLength;
    int detectorIndex_xLength;

    int detectorIndex_yLength;

    double ***matrix; 

    ProjectionValue(int angleLength, int detectorIndex_xLength, int detectorIndex_yLength);

    ~ProjectionValue();
};

メイン クラスで ProjectionValue クラス (自分のクラス) の 3 次元マトリックスを宣言しました。

ProjectionValue*** A_projection [10][10][5];

for(int x=0; x< A->Tomo->object3d->Nx; x++)
{
    for(int y=0; y< A->Tomo->object3d->Ny; y++)
    {
        for(int z=0; z< A->Tomo->object3d->Nz; z++)
        {
            for( int kk=0; kk<11; kk++) 
            {
                for(int m=0; m < A->Tomo->detector->Nx; m++ )  
                {
                    for(int n=0; n < A->Tomo->detector->Ny; n++ )  
                    {
                        (**A_projection[x][y][z])->matrix[kk][m][n] = A->Tomo->ICD_projection(*A->Tomo->xraysource->Source,*A->Tomo->detector->GetCoordinates(m,n), initial_object, x, y, z);
                    }
                }

                A->Tomo->xraysource->RotateXRaySource(-5);
                A->Tomo->detector->RotateDetector(-5); 
            }   
        }   
    }
}

「Form_Solution.exe で 'System.AccessViolationException' 型の未処理の例外が発生しました」を取り上げます。ここです:

(**A_projection[x][y][z])->matrix[kk][m][n] = A->Tomo->ICD_projection(*A->Tomo->xraysource->Source,*A->Tomo->detector->GetCoordinates(m,n), initial_object, x, y, z);

この問題に対して何ができますか? クラスの 3 次元行列の宣言に問題はありますか? 行列の割り当てメモリは必要ですか?どうすればできますか?

4

2 に答える 2

0

これ:

ProjectionValue*** A_projection [10][10][5];

ProjectionValue「クラスの 3D 配列」ではありません。これは、ポインタへのポインタへのポインタへのポインタへのポインタの 3D 配列ですProjectionValue。あなたはおそらく欲しい:

ProjectionValue A_projection [10][10][5];

すべてのポインターとオブジェクトを自分で割り当て (および割り当て解除) する必要があるという余分なオーバーヘッドが必要でない限り。

于 2013-03-19T16:51:46.693 に答える