What is the cause of flexible array member not at end of struct error?
c, malloc, struct
Solution
You can only have one flexible array member in a struct, and it must always be the last member of the struct. In other words, in this case you've gone wrong before you call `malloc`, to the point that there's really no way to call `malloc` correctly for this struct.
To do what you seem to want (arrays of the same number of `data` and `label` members), you could consider something like:
struct my_pair {
double data;
int label;
};
typedef struct {
size_t N;
struct my_pair data_label[];
};
Note that this is somewhat different though: instead of an array of `double`s followed by an array of `int`s, it gives you an array of one `double` followed by one `int`, then the next `double`, next `int`, and so on. Whether this is close enough to the same or not will depend on how you're using the data (e.g., for passing to an external function that expects a contiguous array, you'll probably have to do things differently).
Problem
I am wondering why I keep getting `error: flexible array member not at end of struct` error when I call malloc. I have a struct with a variable length array, and I keep getting this error. The struct is, ``` typedef struct { size_t N; double data[]; int label[]; } s_col; ``` and the call to malloc is, ``` col = malloc(sizeof(s_col) + lc * (sizeof(double) + sizeof(int))); ``` Is this the correct call to malloc?