1. ホーム
  2. c

[解決済み] flexible array member not at end of structエラーの原因は何ですか?

2022-03-13 17:20:04

質問

が表示され続けるのはなぜでしょうか? error: flexible array member not at end of struct というエラーが発生します。私は可変長の配列を持つ構造体を持っていますが、このエラーが出続けています。

その構造体は

typedef struct {
  size_t N;
  double data[];
  int label[];
} s_col; 

で、mallocの呼び出しは

col = malloc(sizeof(s_col) + lc * (sizeof(double) + sizeof(int)));

mallocの呼び出しはこれでよいのでしょうか?

どのように解決するのですか?

構造体には柔軟な配列メンバを 1 つだけ含めることができ、それは常に構造体の最後のメンバでなければなりません。言い換えると、この場合は malloc を呼び出す方法が本当にないほどです。 malloc この構造体に対して、正しく

あなたが望んでいると思われること(同じ数の配列の datalabel のメンバー)のようなものを検討することができます。

struct my_pair { 
    double data;
    int label;
};

typedef struct { 
   size_t N;
   struct my_pair data_label[];
};

の配列のかわりに double の配列に続いて int の場合、1つの配列が得られる。 double に続いて、1つの int を、そして次の double 次の int といった具合です。これが十分に同じに近いかどうかは、データをどのように使うかによります(例えば、連続した配列を期待する外部関数に渡す場合は、おそらく別の方法を取らなければならないでしょう)。