Имам структура, която изглежда така:
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));
Но когато го направя и след това се опитам да получа достъп до нещо във векторите, получавам seg fault.
Ако вместо това декларирам векторите в структурата като:
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);
}
След това всичко работи добре.
Тъй като първият и вторият вектор са с фиксиран размер и са известни по време на компилиране, изглежда странно, че трябва индивидуално да разпределям памет за тях. Има ли начин да ги декларирам в структурата, така че да мога просто да локализирам нова структура, без също така да разпределям памет за всеки вектор поотделно?
mystruct * struct
няма смисъл. - person Collin   schedule 23.03.2012sizeof my_struct
трябва доsizeof(my_struct)
. - person Brian McFarland   schedule 23.03.2012