我正在尝试使用一组嵌套结构;一种定义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;
...