这是我的结构:
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];
但动态分配我不知道如何做到这一点,有人可以帮助我吗?
答案 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
预先分配所有内容,那么没有任何意义,您也可以静态地声明所有内容。