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?
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 callmalloccorrectly for this struct.To do what you seem to want (arrays of the same number of
dataandlabelmembers), you could consider something like:Note that this is somewhat different though: instead of an array of
doubles followed by an array ofints, it gives you an array of onedoublefollowed by oneint, then the nextdouble, nextint, 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).