struct表分配C.

时间:2013-06-22 19:57:50

标签: c arrays struct malloc

这是我的结构:

typedef struct wyraz{

    char *slowo;
    char *tlumaczenie;
    struct wyraz *nastepny;

}WYRAZ;

typedef struct lista_tlumaczen{
    char znak;
    WYRAZ *lista_znakowa;
}LISTA_TLUMACZEN;

我希望有类似的东西

LISTA_TLUMACZEN tab[5];

但动态分配我不知道如何做到这一点,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

当您嵌入指向结构的指针时,您需要考虑层中的内存分配。在这种情况下,从最高级别开始效果最佳。所以从:

开始
LISTA_TLUMACZEN tab[5];

在这里,您要说的是一个p LISTA_TLUMACZEN结构表。如果您希望它是动态的,那么您需要一个指向LISTA_TLUMACZEN

的指针
LISTA_TLUMACZEN *tab;

然后要分配它,你需要确定它有多大。在这种情况下,我们会说NUMBER_OF_ELEMENTS

tab = (LISTA_TLUMACZEN *)malloc(sizeof(LISTA_TLUMACZEN) * 5);

如果您想要特别安全,malloc参数不在范围之外,您可以使用:

tab = (LISTA_TLUMACZEN *)(NUMBER_OF_ELEMENTS <= (SIZE_MAX / sizeof(LISTA_TLUMACZEN)) ? malloc(sizeof(LISTA_TLUMACZEN) * 5) : NULL);

现在我们有动态分配的tab[5]数据声明等效项。请注意,它是LISTA_TLUMACZEN结构的表。因此,要分配的内存量是5的乘积和结构的大小。

您的LISTA_TLUMACZEN结构也有指向另一个具有更多指针的结构的指针。您可以按照相同类型的逻辑分配那些逻辑,或者仅在程序需要时分配它们,并在不再需要时释放它们(这是动态分配的原因)。如果您所做的只是使用malloc预先分配所有内容,那么没有任何意义,您也可以静态地声明所有内容。