如果我有一个包含指向不同类型数据的指针的联合,那么通过与分配给它的字段不同的字段释放错误分配的内存是否合法?它甚至与"公共初始序列"规则匹配吗?
#include <stdlib.h>
typedef struct {
int type;
union {
void *entries;
long *long_entries;
// etc
} u;
} Bar;
int main (void) {
Bar bar;
bar.u.long_entries = malloc(6 * sizeof(long));
free(bar.u.entries);
}
我倾向于说这是合法的,但我不完全确定.
考虑到到目前为止的答案,我认为我必须将我的代码更改为这样的代码;我认为这是完全合法的:
typedef struct {
int type;
void *entries;
} Bar;
int main(int argc, char *argv[]) {
Bar bar;
bar.entries = malloc(6 * sizeof(long));
// ...
long *long_entries = bar.entries;
long_entries[3] = 123;
// ...
free(bar.entries);
}