if(ptr->is_word)
函数上的sizeH(node *ptr)
导致分段错误。
dictionary.c:120:13: runtime error: member access within null pointer of type 'node' (aka 'struct node')
dictionary.c:120:13: runtime error: load of null pointer of type '_Bool'
Segmentation fault
如果我添加一个if
条件以在此if条件之前返回一个特定值,则代码将执行并且我确保根不为null
所以我想问题是ptr
没有正确传递给sizeH
函数。
有帮助吗?
unsigned int size(void)
{
node *ptr = root;
printf(ptr->is_word ? "true" : "false");
unsigned int count = sizeH(ptr);
printf("COUNTER IN SIZE %d\n" , count);
return 0;
}
unsigned int sizeH(node *ptr){
if(ptr->is_word)
{
return 1;
}
else
{
for(int x = 0; x < N; x++){
return 0 + sizeH(ptr->children[x]);
}
}
return 0;
}
答案 0 :(得分:2)
您的sizeH
函数有两个基本问题。首先,它不会检查传入的ptr
是否不是NULL
。这很可能会发生,因为您的函数是递归的,并且每个子节点都会调用此循环。
for(int x = 0; x < N; x++){
return 0 + sizeH(ptr->children[x]);
}
除了循环中的代码是错误的之外,只会为第一个孩子调用它,这是第二个问题。因为您在循环内使用return
,所以它只会运行一次。相反,您应该计算每个子节点返回的值,然后将其返回。
进行上述两项更改会使您的函数看起来像这样。
unsigned int sizeH(node *ptr) {
if(ptr==NULL) {
return 0;
} else if(ptr->is_word) {
return 1;
} else {
unsigned int ret = 0;
for(int x = 0; x < N; x++) {
ret += sizeH(ptr->children[x]);
}
return ret;
}
// return 0; This isn't needed - the code will never reach here.
}
也值得选择一种编码格式样式并坚持使用,而不是混合使用,以使代码更加整洁。