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).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…