vc不查数组下标越界吗

来源:百度知道 编辑:UC知道 时间:2024/05/24 00:23:38
编译能通过。控制台都通不过
我试了下,不但不报错,而且还能访问。假设a[10];a[10]=10;
int b=a[10];则b=10;一点问题没有

C C++的编译器都不检查数组的下标是否越界的 这样可能会产生很多不安全的问题
访问没有分配给数组的内存空间。

int main ()

{

const int SIZE = 4;

int a[SIZE] = {12,40,45,10};

for (int i = 0; i<5 : i++)

cout << "\t a[" << i << "] = " << a[i] << endl;

}

运行结果如下:

a[0] = 12

a[1] = 40

a[2] = 45

a[3] = 10

a[4] = 12358

上面的结果中a[4]访问了不属于数组的内存空间,读取了一个无用的值,这个值是以前使用这个内存单元时保存的值。
另外在操作电脑的时候,经常会遇到这样的情况:突然弹出一个警告框,说此内存地址不能写或不能读。这样的情况就可能发生在下标越界中

对于下标越界、内存溢出,VC认为是程序员的逻辑错误,所以在编译检查语法错误时,并不报错,需要由程序员自己来注意这些错误。

VC不检查的,可以编译通过,不过越界就指向空内存了。

VC检查这里越界错误,这个必须有程序员自己来控制,否则就会出现内存访问错误

VC中下标越界不会产生编译错误,运行时可能出现内存中的随机数字,也可能产生内存错误