Я пытаюсь использовать набор вложенных структур; один, который определяет одну координату в 3D (coordinate
), и другой, который описывает определенные свойства прямоугольника (rectangle
). Количество прямоугольников динамически изменяется во время выполнения, и mallo c успешно работает над назначением массива прямоугольной структуры. Моя проблема заключается в использовании массивов вложенных структур (Face_Close
и Face_Far
) фиксированного размера из 4 элементов, которые я не могу выделить / использовать успешно.
Вложенные структуры:
//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;
Я выделяю внешнюю структуру динамической части памяти размером c с помощью указателя:
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 (Mem Error) во время выполнения при попытке:
cellArray[currentCell]->Face_Close[1]->X
или
cellArray[currentCell]->Face_Close[1].X
Я уже пробовал следующее:
- Изменение
coordinate Face_Far[4];
на coordinate *(Face_Far[4]);
, однако это также дает SIGSEGV (Mem Error). - Изменение
coordinate Face_Far[4];
на int *Face_Far[4];
и использование его в качестве массива указателей, который также выделяется с использованием mallo c с использованием cellArray[currentCell]->Face_Close = (coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
, однако это также дает SIGSEGV (Mem Error). - Изменение
coordinate Face_Far[4];
на int *Face_Far[4];
и попытка присвоения значения, на которое ссылается указатель, cellArray[currentCell]->Face_Close = &(coll_rect_coord**) malloc(4 * sizeof(coll_rect_coord *))
, которое завершается с помощью ошибка lvalue требуется как унарный '& операнд