c++ - vector 错误,一个非常困惑的分割错误?

标签 c++ vector binary-search-tree binary-search

所以基本上,我正在编写一个代码来搜索 vector 内的 vector 元素。虽然我想到了这种方法,但实现它却遇到了段错误。我缩小了问题范围

在代码中,如果我在注释上面的同时取消注释 for 循环中的行,那么将显示 B[i] 的所有元素。为什么会抛出段错误。我认为 binary_return 或多或少是正确的,如果我用 binary_return(A,0,A.size(),B[1]) 然后它的工作。 这是代码:

#include<iostream>
#include<vector>

using namespace std;

int binary_return(vector<int> a,int start,int end,int seek)
{
    int mid = (start+end)/2;
    //cout<<start<<" "<<seek<<" "<<mid;
    if(end!=start)
    {
        if(a[mid]==seek)
        {
            return mid;
        }
        else if(a[mid]>seek)
        {
            return binary_return(a,start,mid,seek);
        }
        else if(a[mid]<seek)
        {
            return binary_return(a,mid,end,seek);
        }
    }
    else
        return -1;
}

int main()
{
    vector<int> A{1,3,6,9,23};
    vector<int> B{1,4,23};
    cout<<B[0]<<B[1]<<B[2];
    for(int i=0;i<B.size();i++)
    {
        cout<<binary_return(A,0,A.size(),B[i]);
        //cout<<binary_return(A,0,A.size(),B[0]);
    }
    return 1;
}

最佳答案

您的代码没有正确处理最后一种情况,最终导致无限递归。

不幸的是,在 C++ 中这意味着任何事情都可能发生(您不能保证会得到有意义的错误)。

在函数的开头添加调试打印,您将看到在哪些情况下您进入了无限递归。

关于c++ - vector 错误,一个非常困惑的分割错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621659/

相关文章:

c++ - 密码程序建模-继承和其他OOP概念

java - 插入和查找节点结构

c++ - 使用 cvtColor 转换单一颜色

c++ - 带有字符的奇怪指针行为

C++:如何解决具有多个多态输入的方法调用?

c++ - 错误:预期在 ‘.’ token 之前的不合格 ID - std::vector

c++ - 如何在 for 循环中创建具有不同名称的 vector

c++ - "Error: No operator "= "matches these operands"

data-structures - AVL 在 AVL 树中代表什么?

C++ 二叉搜索树模板从函数返回节点