我有一個結構,看起來像這樣:如何在結構中分配固定大小的二維數組?
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故障。
如果我不是在聲明該結構中的載體:
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);
}
然後一切工作正常。由於第一個和第二個向量的大小是固定的,並且在編譯時已知,所以似乎很奇怪我必須爲它們單獨分配內存。有沒有辦法在結構中聲明它們,這樣我就可以malloc一個新的結構,而不需要分別爲每個向量分配內存?
第二個代碼段是否是錯字? 'mystruct * struct'沒有意義。 – Collin 2012-03-22 20:02:09
不,它只是真的不清楚(struct應該是變量的名字......)我已經更新了。 – 2012-03-22 20:45:48
您修正了其中一個拼寫錯誤,但'sizeof my_struct'應該由'sizeof(my_struct)'。 – 2012-03-22 20:50:48