我必须找到从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变量分配内存,如下所示-请参见this

long int *arr2 = new long int[limit];

可能为每个函数分配了有限的堆栈大小(4k或4M(大)页面大小),并且局部变量进入了堆栈。因此,如果进行计算,则堆栈上没有足够的空间用于arr2和程序返回访问冲突,一旦达到堆栈限制。
另外,不要忘记释放分配的空间。
delete [] arr2;

关于c++ - long int中cpp的段错误高于999999,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59687741/

10-15 00:24
查看更多