为什么会出现运行时错误?我已经设置了长整
Why is there runtime-error? I have already set long int
#include <stdio.h>
long equation(long x){
return x*x+x;
}
long BinarySearch(long arr[],long start,long end,long k){
if(start==0 && end==0){
return 0;
}
else if((end-start)<=5){
for(int i=start;i<=end;i++){
if(arr[i]<=k && arr[i+1]>k){
return i;
}
}
}
else{
long mid=(start+end)/2;
if(arr[mid]==k){
return mid;
}
else if(arr[mid]>k){
return BinarySearch(arr,start,mid-1,k);
}
else{
return BinarySearch(arr,mid+1,end,k);
}
}
}
int main() {
long a;
scanf("%ld",&a);
long roots[a];
for(long i=0;i<a;i++){
roots[i]=equation(i);
}
printf("%ld",BinarySearch(roots,0,a-1,a));
return 0;
}
对于较小的数字(低于 100000000(,此代码有效,但超过 100000000 时,此代码存在运行时错误。我将每个变量设置为长整型...我用了c++导师,它说长方程的步长有问题。大小为 8 的写入无效...为什么?
长根[a];
它是可变长度数组。这不是C++标准的一部分。(但是GNU编译器确实支持它。它是 C99 和 C11 可选的一部分(。不知道它是如何实现的。但不管它是什么,它都不能包含这么多长整数。
让我们做一个数学问题。假设 1MB = 10**6 Bytes
,一个 long int 的大小为 4 字节,那么 100000000
longs 需要 400MB 内存。我认为它不能存储在通常为 4MB 的堆栈中。
你说你用了长 int。但在大多数编译器中,int
和 long
之间没有区别(尽管它可能与这个问题无关(。
并且足够大的数据范围会让你调用递归函数的次数过多,这可能会导致堆栈溢出。
相关文章:
- 删除指向指针的指针是运行时错误吗
- c++中的指针和运行时错误
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 在同一模拟中使用静脉和静脉_ inet内容时出现运行时错误
- 对单向链表进行排序时出现运行时错误
- 为什么此代码存在运行时错误?
- 你能解释一下什么运行时错误是如何解决它的吗?
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 为什么程序在 c++ 中迭代 emtpy 向量时会抛出运行时错误
- 运行时错误:引用绑定到类型为"int"的空指针
- 为什么当 vector 为空时会显示运行时错误?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 运行时错误:矢量下标超出范围:正在检查空集
- 分配给gslice_array会导致运行时错误
- cout 新创建的对象引发运行时错误
- C++在使用std::multimap时出现运行时错误的几率很小
- glfw 的基本设置会导致与 emscripten 生成的 js 文件中的事件侦听器有关的运行时错误
- 为什么会出现运行时错误?我已经设置了长整
- 映射/设置迭代器未解除可绑定运行时错误
- C++指针运行时错误 - 使用指针设置变量然后检索