Trie引发的血案——再论参数
看到标题,或许聪明的你会说,参数不就那么回事吗?还要“再论”?
在决定写这篇文章之前,我也是这么认为的,自认为对C/C++的参数传递以及压栈方式了如指掌。
但是总有一些细节,在我们不注意的瞬间,给我们一个深刻的教训。
以前自己写Trie,用的是静态内存,不够灵活,虽然ACM/ICPC或其他算法竞赛都会给出严格的数据范围,避免越界。但是在实际项目中,没有人会知道,没有人能够预测自己有多少用户,自己的数据库中会被用户塞入多少T的数据。所以为了更好的可扩展性,我决定使用动态内存。
下面是我的创建Trie的函数,大家发现问题没有?
void createTree(Node** root){ *root = (Node*)malloc(sizeof(Node)); for (int i = 0; i < char_count; i++) { (*root)->val = -1; (*root)->next[i] = NULL; }}看到这里,相信你也明白了吧。Trie引发的血案,至此结案。