c - 如何判断一段代码为什么会产生死循环?

标签 c binary-search

这是我的二进制搜索功能。我似乎找不到错误,但每次我尝试运行代码时,它都会给我一个段错误 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);

   }

也没有意义,因为最初变量startend满足包含if语句的条件

if(start <= end) {

最后,使用标准函数 exit 而不是 return 语句是没有意义的。

关于c - 如何判断一段代码为什么会产生死循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46654610/

相关文章:

c - Rust 调用 C,C 代码中的静态常量

objective-c - 在 Objective-C 中,是否有一种优雅的方法可以在对象的生命周期内执行一次代码?

c++ - 有没有办法解决使用 break 语句的问题?

c++ - k 旋转移位数组并找到 x?

python - 使用递归的二分搜索进入无限循环

c - 使用 C 将字符串中每个字符的位置从其当前位置循环移动到它的右边

c - 结构 C 内的动态可变长度

c - 使用 CMake 安装附加文件

algorithm - 使用二进制搜索查找多个条目

java - 在字符串数组上实现二进制搜索