-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 类(我的类)的 3d 矩阵。

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);

我可以为这个问题做些什么,我的 3d 类矩阵的声明有什么问题吗?矩阵的分配内存是否必要,我该怎么做?

4

2 回答 2

0

我会改变你个人写这篇文章的方式。除非您想编写自己的动态分配数组类,否则我只会使用 stl 向量。

using std::vector;

class Matrix3D
{
public:
Matrix3D(unsigned x, unsigned y, unsigned z)
{
   data.clear();
   data.resize(x);
   for(unsigned i=0;i<data.size();++i)
   {
      data[i].resize(y);
      for(unsigned j=0;j<data[i].size();++j)
      {
          data[i][j].resize(z);
      }
   }
}

vector< vector< vector< float > > > data;
};

我没有尝试编译这个。

于 2013-03-19T17:09:20.607 回答
0

这个:

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

不是“ProjectionValue类的 3D 数组”。它是指向指针的指针的 3D 数组ProjectionValue。你可能想要:

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

除非您想要自己分配(和取消分配)所有指针和对象的额外开销。

于 2013-03-19T16:51:46.693 回答