C++ 面临返回值为3221225725的进程退出的问题
对于一些值,我得到了这个-‘进程退出,返回值为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
#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;
cout322225725
是十六进制的0xc0000fd
,这是微软针对堆栈溢出的代码
您已经编写了一个递归的binsearch()
函数,因此这显然是查找问题的地方
只有当n==1
或a[mid]==find
时,您的递归才会停止。但是在您的代码中,n
将永远不会等于1,因为它在每次递归调用中都是以不变的方式传递的。这是一个错误(可能还有更多,我没有检查过)。因此,如果输入的数字不在数组中,则会出现堆栈溢出,因为在这种情况下,a[mid]==find
也永远不会为真
我的建议是从代码中删除n
。n
总是等于u-l+1
,因此不需要单独的变量。如果您需要知道n
的值,您总是可以从l
和u322225725
是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:任何答案都没有帮助您解决问题吗?发布您的输入以获取答案。欢迎使用堆栈溢出。以帮助您在堆栈结束时获得最佳结果