Union的动态内存分配

时间:2014-06-06 07:48:47

标签: c

我有一个以下类型的联合,例如

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

2 个答案:

答案 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]