【发布时间】:2011-11-27 18:17:02
【问题描述】:
我有一个递归的struct,它是:
typedef struct dict dict;
struct dict {
dict *children[M];
list *words[M];
};
以这种方式初始化:
dict *d = malloc(sizeof(dict));
bzero(d, sizeof(dict));
我想知道 bzero() 在这里到底做了什么,以及我如何为孩子递归地 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已被弃用。请改用calloc或malloc/memset。 -
我不明白在这里有
bzero()有什么意义? -
@DietrichEpp 我有一个
#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)定义来做到这一点。
标签: c struct malloc recursive-datastructures