动态嵌套结构数组

Dynamic nested structure arrays

我正在尝试使用一组嵌套结构;一种在 3D 中定义单个坐标 (coordinate),另一种描述矩形的某些属性 (rectangle)。矩形的数量在运行时动态变化,malloc 成功分配矩形结构数组。我的问题在于使用固定大小为 4 项的嵌套结构数组(Face_CloseFace_Far),我似乎无法成功分配/使用它。

嵌套结构:

//co-ordinate structure
typedef struct coordinate
{
    double X;
    double Y;
    double Z;
} coordinate;

//rectangle
typedef struct rectangle
{
    coordinate Face_Close[4];
    coordinate Face_Far[4];
    coordinate Rotation_Centre;
    coordinate Normal_To_Plane;
} rectangle;

我正在使用指针将外部结构分配给动态大小的内存部分:

struct rectangle **cellArray;

cellArray 的内存在运行时成功分配和定义:

cellArray = (rectangle**) malloc(num_Cells * sizeof(rectangle*));

虽然我可以使用以下方式分配单个嵌套结构实例的元素:

cellArray[currentCell]->Rotation_Centre.X = X_value;
cellArray[currentCell]->Rotation_Centre.Y = Y_value;
cellArray[currentCell]->Rotation_Centre.Z = Z_value;

我似乎无法为 Face_CloseFace_Far 使用内部结构数组;我的代码编译成功,没有任何警告,但在运行时尝试以下任一操作时会生成 SIGSEGV(内存错误)错误:

cellArray[currentCell]->Face_Close[1]->X

cellArray[currentCell]->Face_Close[1].X

我已经尝试过以下方法:

您分配了一个指向 rectangle 结构的指针数组,但您没有让这些指针指向实际的结构,分配的不是。事实上,这些指针是未初始化的,因此取消引用它们具有未定义的行为:在您的情况下是分段错误。

您应该分配结构,或者使 cellArray 成为指向 rectangle 数组的指针并适当地分配它:

struct rectangle *cellArray;

cellArray = malloc(num_Cells * sizeof(*cellArray));

如果currentCell < num_Cells你会写:

cellArray[currentCell].Rotation_Centre.X = X_value;
cellArray[currentCell].Rotation_Centre.Y = Y_value;
cellArray[currentCell].Rotation_Centre.Z = Z_value;

cellArray[currentCell].Face_Close[1].X = X_value;
...