gpt4 book ai didi

c - 为 union 体只为一名成员分配足够的内存是错误的吗?

转载 作者:行者123 更新时间:2023-12-02 10:52:29 25 4
gpt4 key购买 nike

是否可以分配足以仅容纳特定 union 成员的内存?我的意思是这样的:

#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]) 并且分配 4096 * sizeof(long)< 会浪费内存 保存单个 int

是否可以做像上面这样的事情?或者这是未定义的行为?

最佳答案

我找到了为什么 union 使用无效的答案。 N1570::6.2.5p(20):

A union type describes an overlapping nonempty set of member objects, each of which has an optionally specified name and possibly distinct type.

这意味着 union 对象必须分配足够的内存来容纳 union 的每个成员,但它是重叠的。就我而言, union 的使用是不合法的,因为我分配的内存足以仅容纳其中之一。

关于c - 为 union 体只为一名成员分配足够的内存是错误的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com