Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 面临返回值为3221225725的进程退出的问题_C++ - Fatal编程技术网

C++ 面临返回值为3221225725的进程退出的问题

C++ 面临返回值为3221225725的进程退出的问题,c++,C++,对于一些值,我得到了这个-‘进程退出,返回值为3221225725’。我面临着一个问题,就是要找出哪里出了问题。请有人帮帮我。这是密码- #include<iostream> using namespace std; int binsearch(int a[],int find,int l,int u,int n); int main() { int a[10]={1,54,76,89,123,145,198,230

对于一些值,我得到了这个-‘进程退出,返回值为3221225725’。我面临着一个问题,就是要找出哪里出了问题。请有人帮帮我。这是密码-


    
    #include<iostream>
    using namespace std;
    int binsearch(int a[],int find,int l,int u,int n);
    int main()
    {
        int a[10]={1,54,76,89,123,145,198,230,345,654};
        int n=sizeof(a)/sizeof(a[0]);
        int find,l=0,u=n-1,x;
        cout<<"Enter number which you want to find"<<endl;
        cin>>find;
       x= binsearch(a,find,l,u,n);
       if(x==0)
       cout<<"Element is not found";
       else
       cout<<"Element is present at "<<x;
    }
    int binsearch(int a[],int find,int l,int u,int n){

        if(n==1)
        {
            if(find==a[l])
            return l;
            else
            return 0;
        }
        else
        {
            int mid=l+u/2;
            if(a[mid]==find)
            return mid;
            else if(a[mid]<find)
            return binsearch(a,find,mid+1,u,n);
            else
            return binsearch(a,find,l,mid-1,n);
        }
    }

#包括
使用名称空间std;
int binsearch(int a[],int find,int l,int u,int n);
int main()
{
INTA[10]={1,54,76,89123145198230345654};
int n=sizeof(a)/sizeof(a[0]);
int find,l=0,u=n-1,x;

cout
322225725
是十六进制的
0xc0000fd
,这是微软针对堆栈溢出的代码

您已经编写了一个递归的
binsearch()
函数,因此这显然是查找问题的地方

只有当
n==1
a[mid]==find
时,您的递归才会停止。但是在您的代码中,
n
永远不会等于1,因为它在每次递归调用中都是以不变的方式传递的。这是一个错误(可能还有更多,我没有检查过)。因此,如果输入的数字不在数组中,则会出现堆栈溢出,因为在这种情况下,
a[mid]==find
也永远不会为真


我的建议是从代码中删除
n
n
总是等于
u-l+1
,因此不需要单独的变量。如果您需要知道
n
的值,您总是可以从
l
u

322225725
0xc0000fd
十六进制,这是Microsoft针对堆栈溢出的代码

您已经编写了一个递归的
binsearch()
函数,因此这显然是查找问题的地方

只有当
n==1
a[mid]==find
时,您的递归才会停止。但是在您的代码中,
n
永远不会等于1,因为它在每次递归调用中都是以不变的方式传递的。这是一个错误(可能还有更多,我没有检查过)。因此,如果输入的数字不在数组中,则会出现堆栈溢出,因为在这种情况下,
a[mid]==find
也永远不会为真


我的建议是从代码中删除
n
n
总是等于
u-l+1
,因此不需要单独的变量。如果您需要知道
n
的值,当您输入一个找不到的数字时,您总是可以通过
l
u
来计算它h将一次又一次地调用自身,直到堆栈溢出,因为终止条件
if(n==1)
永远不会是
真的
,因为你总是用相同的
n
调用
bin搜索。
n
是不需要的,因为你同时拥有
l
u
,所以只要把它设置为
int n=u-l+1;

mid=l+u/2
也不正确。它与
mid=u/2+l
相同。您需要
mid=(l+u)/2

此外,如果您搜索
1
,它将返回索引
0
,但您将
0
视为“未找到”。由于您使用带符号整数进行索引,因此可以返回
-1
以表示找不到该数字

例如:

#include <iostream>
#include <iterator> // std::size()

int binsearch(int a[], int find, int l, int u) {
    int n = u - l + 1;

    if(n == 1) {
        if(find == a[l])
            return l;
        else
            return -1;
    } else {
        int mid = (l + u) / 2;

        if(a[mid] == find)
            return mid;
        else if(a[mid] < find)
            return binsearch(a, find, mid + 1, u);
        else
            return binsearch(a, find, l, mid - 1);
    }
}

int main() {
    int a[] = {1, 54, 76, 89, 123, 145, 198, 230, 345, 654};
    int l = 0, u = std::size(a) - 1, x;

    std::cout << "Enter number which you want to find\n";
    if(int find; std::cin >> find) {
        x = binsearch(a, find, l, u);
        if(x == -1)
            std::cout << "Element is not found";
        else
            std::cout << "Element is present at " << x;
        std::cout << '\n';
    }
}
#包括
#include//std::size()
int-bin搜索(int a[],int-find,int-l,int-u){
int n=u-l+1;
如果(n==1){
if(find==a[l])
返回l;
其他的
返回-1;
}否则{
int mid=(l+u)/2;
if(a[mid]==查找)
中途返回;
else if(a[mid]find){
x=b搜索(a,find,l,u);
如果(x==-1)

std::cout当您输入一个找不到的数字时,
binsearch
将反复调用自己,直到堆栈溢出,因为终止条件
if(n==1)
永远不会是
真的
,因为你总是用相同的
n
调用
bin搜索。
n
是不需要的,因为你同时拥有
l
u
,所以只要把它设置为
int n=u-l+1;

mid=l+u/2
也不正确。它与
mid=u/2+l
相同。您需要
mid=(l+u)/2

此外,如果您搜索
1
,它将返回索引
0
,但您将
0
视为“未找到”。由于您使用带符号整数进行索引,因此可以返回
-1
以表示找不到该数字

例如:

#include <iostream>
#include <iterator> // std::size()

int binsearch(int a[], int find, int l, int u) {
    int n = u - l + 1;

    if(n == 1) {
        if(find == a[l])
            return l;
        else
            return -1;
    } else {
        int mid = (l + u) / 2;

        if(a[mid] == find)
            return mid;
        else if(a[mid] < find)
            return binsearch(a, find, mid + 1, u);
        else
            return binsearch(a, find, l, mid - 1);
    }
}

int main() {
    int a[] = {1, 54, 76, 89, 123, 145, 198, 230, 345, 654};
    int l = 0, u = std::size(a) - 1, x;

    std::cout << "Enter number which you want to find\n";
    if(int find; std::cin >> find) {
        x = binsearch(a, find, l, u);
        if(x == -1)
            std::cout << "Element is not found";
        else
            std::cout << "Element is present at " << x;
        std::cout << '\n';
    }
}
#包括
#include//std::size()
int-bin搜索(int a[],int-find,int-l,int-u){
int n=u-l+1;
如果(n==1){
if(find==a[l])
返回l;
其他的
返回-1;
}否则{
int mid=(l+u)/2;
if(a[mid]==查找)
中途返回;
else if(a[mid]find){
x=b搜索(a,find,l,u);
如果(x==-1)

std::cout发布您的输入。欢迎使用堆栈溢出。为了帮助您获得关于堆栈溢出的最佳结果,请参阅如何提问good。确保您的问题包含以下3个元素:1.问题陈述2.您的代码(应该是3.错误消息(最好是完全回溯,以帮助其他人查看和提供反馈)。有时可能已经问过相同的问题。请确保您的问题不是BrahmkaranSingh:任何答案都没有帮助您解决问题吗?发布您的输入以获取答案。欢迎使用堆栈溢出。以帮助您在堆栈结束时获得最佳结果