一句话理解
运行错误是程序已经开始跑,执行过程中崩溃或行为非法。
为什么要学
除零、数组越界、递归太深,都可能让程序在半路死掉。
讲解
编译只检查“句子通不通”。运行才检查“这件事做不做得到”。
常见原因:除以 0、访问 a[-1] 或 a[n]、空指针、递归没有出口导致栈爆。
评测机上很多运行错误会显示成 RE。本地可能表现为直接闪退。
例子
int a[3] = {1, 2, 3};
int x = a[100]; // 越界,可能崩溃,也可能读到垃圾值
数组只有 0、1、2 三个合法下标。访问 100 是非法的,属于运行期错误,不一定被编译器发现。
常见错误
- 以为能编译就一定能安全运行。
- 越界不一定次次崩溃,有时只是答案离奇,更难查。