我有一个以下类型的联合,例如
typedef union
{
typedef struct
{
short int a;
short int b;
short int c;
short int d
}str1;
short int my_array[x];
}union1;
这里我想动态地为数组分配内存,这总是比str1
需要的更多。我需要在上面的代码中应用哪些更改,以便能够动态地将内存分配给my_array
?
答案 0 :(得分:1)
我要做的是使my_array
成为指针,如下所示:
typedef union
{
struct
{
short int a;
short int b;
short int c;
short int d;
} str1;
short int *my_array;
} union1;
你可以这样做:
union1 foo;
foo.my_array = malloc(bar * sizeof(short int));
我删除了您使用的内部typedef
,因为它没有任何用途并导致编译器错误。我假设您打算使用匿名struct
?
答案 1 :(得分:0)
您可以使用此功能,但请注意,您将无法使用union1
数组:
typedef struct
{
short a;
short b;
short c;
short d;
}
str1;
typedef union
{
str1 my_str;
short my_array[0];
}
union1;
union1* allocate_union1(int additional_size)
{
return (union1*)malloc(sizeof(union1)+additional_size);
}
如果您收到[0]
的编译器警告,则可以将其替换为[1]
。