gpt4 book ai didi

c - 递归结构和 malloc()

转载 作者:太空宇宙 更新时间:2023-11-04 01:39:34 24 4
gpt4 key购买 nike

我有一个递归的 struct 是:

typedef struct dict dict;
struct dict {
dict *children[M];
list *words[M];
};

这样初始化:

dict *d = malloc(sizeof(dict));
bzero(d, sizeof(dict));

我想知道 bzero() 在这里到底做了什么,以及我如何为 child 递归地 malloc()

编辑:这就是我希望能够malloc() childrenwords 的方式:

void dict_insert(dict *d, char *signature, unsigned int current_letter, char *w) {
int occur;
occur = (int) signature[current_letter];
if (current_letter == LAST_LETTER) {
printf("word found : %s!\n",w);
list_print(d->words[occur]);
char *new;
new = malloc(strlen(w) + 1);
strcpy(new, w);
list_append(d->words[occur],new);
list_print(d->words[occur]);
}
else {
d = d->children[occur];
dict_insert(d,signature,current_letter+1,w);
}
}

最佳答案

bzero(3)将内存初始化为零。相当于调用memset(3)第二个参数为 0。在这种情况下,它将所有成员变量初始化为空指针。 bzero 被认为已弃用,因此您应该将其替换为 memset;或者,您可以直接调用 calloc(3)而不是 malloc,它会在成功时自动为您清零返回的内存。

您不应该使用您编写的两种类型转换中的任何一种——在 C 中,void* 指针可以隐式转换为任何其他指针类型,并且任何指针类型都可以隐式转换为 无效*malloc 返回一个 void*,因此您可以将它分配给您的 dict *d 变量而无需强制转换。类似地,bzero 的第一个参数是 void*,因此您可以直接将 d 变量传递给它而无需强制转换。

要理解递归,首先要理解递归。如果您想避免无限分配内存,请确保您有合适的基本情况。

关于c - 递归结构和 malloc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8287809/

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