我必须找到从1到20亿进行二进制搜索所需的时间,但是我不能使用数据类型。 long int或long long int或任何其他显示分段错误。
最高999999可以正常工作,但9999991会给出分段错误。请帮忙。
void binSch2(long int arr[], long int x, long int l, long int h)
{
if(l>h)
{
printf("not present");
return;
}
unsigned long int mid=l+(h-l)/2;
if(arr[mid]==x)
{
printf("found %ld at %ld", x, mid);
}
else if(x<arr[mid]) binSch2(arr, x, l, mid-1);
else if(x>arr[mid]) binSch2(arr,x , mid+1, h);
}
int main()
{
long int limit=2000000000;
long int arr2[limit];
for(long int i=0; i<limit; i++)
{
arr2[i]=i+1;
}
long int N2=sizeof(arr2)/sizeof(arr2[0]);
long int x2=88888;
long int z=0;
clock_t begin = clock();
binSch2(arr2, x2, z, N2-1);
clock_t end = clock();
double time_spent = (double)(end - begin) / CLOCKS_PER_SEC;
printf("\ntime : %lf ", (double)(end - begin) / CLOCKS_PER_SEC);
return 0;
}
最佳答案
尝试在堆中为arr2变量分配内存,如下所示-请参见thislong int *arr2 = new long int[limit];
可能为每个函数分配了有限的堆栈大小(4k或4M(大)页面大小),并且局部变量进入了堆栈。因此,如果进行计算,则堆栈上没有足够的空间用于arr2
和程序返回访问冲突,一旦达到堆栈限制。
另外,不要忘记释放分配的空间。delete [] arr2;
关于c++ - long int中cpp的段错误高于999999,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59687741/