У меня есть структура, которая выглядит так:
typedef struct _my_struct {
float first_vector[SOME_NUM][OTHER_NUM];
float second_vector[SOME_NUM][OTHER_NUM];
int some_val;
} my_struct;
Я бы хотел сделать:
my_struct * thing = (my_struct *)malloc(sizeof(my_struct));
Но когда я делаю это и затем пытаюсь получить доступ к чему-либо в векторах, я получаю ошибку сегмента.
Если я вместо этого объявлю векторы в структуре как:
typedef struct _my_struct {
float **first_vector;
float **second_vector;
int some_val;
} my_struct;
, а затем выделить с помощью:
my_struct->first_vector = (float**)malloc(sizeof(float*) * SOME_NUM);
my_struct->second_vector = (float**)malloc(sizeof(float*) * SOME_NUM);
int i;
for (i = 0; i < SOME_NUM; i++){
my_struct->first_vector[i] = (float*)malloc(sizeof(float) * OTHER_NUM);
my_struct->second_vector[i] = (float*)malloc(sizeof(float) * OTHER_NUM);
}
Тогда все работает нормально.
Поскольку первый и второй вектор имеют фиксированный размер и известны во время компиляции, кажется странным, что мне приходится отдельно выделять для них память. Есть ли способ объявить их в структуре, чтобы я мог просто распределить новую структуру, не выделяя при этом память для каждого вектора отдельно?