我有一个递归的 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()
children
和words
的方式:
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/