私はこのようになります構造体があります。私がやりたい構造体に固定サイズの2次元配列を割り当てるにはどうすればよいですか?
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);
}
その後、すべてが正常に動作します。
第1および第2のベクトルはサイズが固定されており、コンパイル時には既知であるため、個々にメモリを割り当てなければならないのは奇妙なことです。構造体でそれらを宣言する方法はありますか?それで、各ベクトルに別々にメモリを割り当てずに新しい構造体をmallocできるだけですか?
2番目のコードスニペットはタイプミスですか? 'mystruct * struct'は意味がありません。 – Collin
いいえ、それは本当に不明でした(構造体は変数の名前であるはずです...)私は更新しました。 –
あなたはタイプミスを修正しましたが、 'sizeof my_struct'は' sizeof(my_struct) 'によって行うべきです。 –