Runtime error

runtime error(运行时错误)就是程序运行到一半,程序就崩溃了。


根据经验,大多数情况是因为程序员对内存的理解不透彻导致错误应用引起的,简单的说几个常见的:
①除以零的情况,比如1/0此类的。
②数组越界:int a[3]; 但程序中的要求却至少是一个为100的数组。
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free§; *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];Runtime error。
----百度知道
我的老师教导我说尽量不用指针,因为可能用着用着你就不知道此时的变量指代的是什么

针对于可以举一个例子:
Runtime error_第1张图片
Runtime error_第2张图片 这样的话就会出现上面的结果,但是在实际计算内存的时候并没有使用大于内存范围的内存,实际计算内存的是一百多MB,但是题目中所给出的内存是这样的:在这里插入图片描述,但是他最后还是RE了,所以数组是不可以开那么大的。


补充:(一些博主会出现的问题)

  1. 可能是自己的程序代码中的变量名字打错【可能在编译的时候就会发现】;
  2. 可能是自己的程序有一些问题;比如说,删了不成对的括号,但是自己没有找到;
  3. 编程语言类型选择错误(和自己的的头文件不符);比如说,c语言的头文件用到c++中(有的测评机可能可以)但是博主因为这个炸过!!!
  4. 自己的变量名字错误,从而导致自己的空间炸掉,但是编译还过了的!!!!!所以就需要格外留意。

第4点举个栗子:下面是一个 质数筛
n ≤ 2 × 1 0 9 n≤2×10^9 n2×109
b o o l 类 型 , v [ 1 e 5 + 10 ] ; / / 合 数 标 记 bool类型,v[1e5+10];//合数标记 boolv[1e5+10];//

//错误示范:
void prime(int k)
{
	for(int i=2;i<=k;++i)
	{
		if(v[i])	continue;
		for(int j=i;j<=n/i;++j)//枚举的是系数 
			v[i* j]=true;
	}
}

这份代码的编译过了,但是由于上面代码的 j < = n / i j<=n/i j<=n/i,所以j可能枚举到 2 × 1 0 9 2×10^9 2×109,但是你的数组只开到了 1 e 5 + 10 1e5+10 1e5+10,导致空间炸掉,所以提交之后就炸掉了。

  1. 也可能是在递归的时候遍历的次数太多,或者是层数太深(dfs的次数太多了),都会导致堆栈溢出,然后就会显示RE。
    在这里插入图片描述
  2. 使用不存在的空间。在括号匹配中所使用的栈中明明已经没有元素了,但是还是继续在删除,所以就RE了。在这里插入图片描述

你可能感兴趣的:(其他)