这是我的二进制搜索功能。我似乎找不到错误,但每次我尝试运行代码时,它都会给我一个段错误 11。我觉得我的错误与我最后的 else if 语句有关。
void binary(struct list *A[], char search[15], int start, int
end) {
if(start <= end) {
int middle = (start + end)/2;
if(strcmp(search, A[middle]->name) == 0){
printf("found");
exit(0);
} else if (strcmp(search, A[middle]->name) > 0){
int start = middle + 1;
int end = end;
binary(A, search, start, end);
} else if (strcmp(search, A[middle]->name) < 0){
int start = start;
int end = middle - 1;
binary(A, search, start, end);
} else if (start == (end - 1)) {
printf("%s was not found in the list", search);
exit(0);
}
}
}
最佳答案
这些陈述
int end = end;
int start = start;
没有意义,因为变量是在具有不确定值的情况下自行初始化的。
不需要声明局部变量end和start。使用参数。
这个声明
} else if (start == (end - 1)) {
printf("%s was not found in the list", search);
exit(0);
}
也没有意义,因为最初变量start
和end
满足包含if语句的条件
if(start <= end) {
最后,使用标准函数 exit
而不是 return 语句是没有意义的。
关于c - 如何判断一段代码为什么会产生死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654610/