动态嵌套结构数组
Dynamic nested structure arrays
我正在尝试使用一组嵌套结构;一种在 3D 中定义单个坐标 (coordinate
),另一种描述矩形的某些属性 (rectangle
)。矩形的数量在运行时动态变化,malloc 成功分配矩形结构数组。我的问题在于使用固定大小为 4 项的嵌套结构数组(Face_Close
和 Face_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_Close
或 Face_Far
使用内部结构数组;我的代码编译成功,没有任何警告,但在运行时尝试以下任一操作时会生成 SIGSEGV(内存错误)错误:
cellArray[currentCell]->Face_Close[1]->X
或
cellArray[currentCell]->Face_Close[1].X
我已经尝试过以下方法:
- 将
coordinate Face_Far[4];
更改为 coordinate *(Face_Far[4]);
但这也会产生 SIGSEGV(内存错误)。
- 将
coordinate Face_Far[4];
更改为 int *Face_Far[4];
并将其用作指针数组,该指针数组也使用 cellArray[currentCell]->Face_Close = (coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
使用 malloc 进行分配,但这也会产生 SIGSEGV(内存错误)。
- 将
coordinate Face_Far[4];
更改为 int *Face_Far[4];
并尝试通过 cellArray[currentCell]->Face_Close = &(coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
分配指针引用的值,这导致错误左值需要作为一元 '& 操作数
您分配了一个指向 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;
...
我正在尝试使用一组嵌套结构;一种在 3D 中定义单个坐标 (coordinate
),另一种描述矩形的某些属性 (rectangle
)。矩形的数量在运行时动态变化,malloc 成功分配矩形结构数组。我的问题在于使用固定大小为 4 项的嵌套结构数组(Face_Close
和 Face_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_Close
或 Face_Far
使用内部结构数组;我的代码编译成功,没有任何警告,但在运行时尝试以下任一操作时会生成 SIGSEGV(内存错误)错误:
cellArray[currentCell]->Face_Close[1]->X
或
cellArray[currentCell]->Face_Close[1].X
我已经尝试过以下方法:
- 将
coordinate Face_Far[4];
更改为coordinate *(Face_Far[4]);
但这也会产生 SIGSEGV(内存错误)。 - 将
coordinate Face_Far[4];
更改为int *Face_Far[4];
并将其用作指针数组,该指针数组也使用cellArray[currentCell]->Face_Close = (coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
使用 malloc 进行分配,但这也会产生 SIGSEGV(内存错误)。 - 将
coordinate Face_Far[4];
更改为int *Face_Far[4];
并尝试通过cellArray[currentCell]->Face_Close = &(coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
分配指针引用的值,这导致错误左值需要作为一元 '& 操作数
您分配了一个指向 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;
...