C++ 数组越界的例子
C++ 对于数组是否越界不会做检查。我们来看看下面这个例子的运行结果。下面是一个学习笔记:
示例代码
#include <iostream>
#include <array>
using namespace std;
int static arrayOutOfBoundary() {
int i = 0;
int arr[3] = {0}; // 包含三个 int 元素的数组,并且,每个元素的值初始化为 0
for (; i < 4; i++) { // i < 4, 这个地方会造成数组越界
arr[i] = i;
cout << "arr[" << i << "] = " << arr[i] << endl;
}
return 0;
}
在 Mac + Clion 上,在第十行加个断点,开始debug,下面是 debug 输出:
arr[0] = 0
arr[1] = 1
arr[2] = 2
arr[3] = 3
Signal: SIGABRT (signal SIGABRT)
Terminated due to signal 6
Process finished with exit code 0
从运行结果,我们可以看出,尽管 a[3] 越界了,但是,仍然被复制了,并且可以打印其值。
C++ 不会检查越界,但是会抛出一个异常 Signal: SIGABRT (signal SIGABRT),如果不捕捉和处理这个异常,那么,程序就会进入 terminate 流程,对应的log是:Terminated due to signal 6。