今天发现了一个很奇怪的现象,例如:
void show(int a[5])
{
int c[8];
for (int i = 0; i < 8; i++)
{
c[i] = a[i];
}
cout << a[3] << endl;
}
int main(int argc, char* argv[])
{
int a[2] = {1, 2};
show(a);
system("pause");
return 0;
}
输出a[3]时,程序居然没有报AV的错误
上网查了查资料,原来C++并不会检查数组越界,a[3]访问的仍是本进程的有效地址,所以并不会报AV错误。
AV错误是访问了不属于自己进程的内存地址。
正确的做法应该是:
void show(int (&a)[5])
{}