能否分配足够容纳特定联合成员的内存?我的意思是这样的:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
union u;
union u{
int a;
long b[4096];
};
int main(){
union u tmp = {.a = 42};
union u *u = (union u*) malloc(sizeof(int)); //not malloc(sizeof(union u))
memcpy(u, &tmp, sizeof(int));
printf("u::a = %lu\n", u -> a);
}
sizeof(union u)
等于 sizeof(long[4096])
,为了只容纳一个 int
,分配 4096 * sizeof(long)
的内存会浪费空间。
像上面那样做是可能的吗?还是未定义行为?
sizeof(union u)
)。其他任何内容都是无效的。 - Some programmer dudeunion
只能同时包含一个成员。 标准规定:具有联合类型的对象一次只能包含一个成员
。那么将联合对象设置为包含int a
并且只分配足以容纳此int a
的内存有什么问题? - Some Namememcpy(u, &tmp, sizeof(int));
is conceptually amiss.memcpy(&u->a, &tmp.a, sizeof u->a);
makes more sense - or justu->a = tmp.a;
- chux - Reinstate Monica