C++数组越界问题?

int* a = new int[2];
a[0] = 1;
a[1] = 2;
a[2] = 3;//1
for (int i = 0; i < 3; i++)
{
cout << a[i] << endl ;
}//2
这里为什么使用指针来定义一个数组,在1处C++不检查越界可以理解,但是为什么在2处我发现越界的信息却可以赋值和输出?

你要首先了解内存分配的原理。 你在new操作之后,系统可能返回一个新分配的内存,也可能从已经分配并已经回收的内存中拿出来一个小块给你。 至于这块内存后面的那一部分(也就是a[3])是否能被访问,是不确定的。
我举几个例子吧(不知道你能不能够理解,我尽力而为):1,这个内存后边的内存是非法内存,例如这个内存后面的部分还没有被你的程序申请过,它已经位于堆内存管理的末端,那么这种情况a[3]赋值程序直接崩溃,一般可能报memory violation等非法访问一列(具体我忘记叫啥了,意思是这个意思)。 2,这个内存后面的内存确实被本程序申请过,而且它还未被占用,属于本程序的空闲内存,那么你那样赋值确实可以work,而且还能取到。3,这个内存不是空闲的,是本程序的,但可能是另外一个数组的一部分,那么你的操作相当于覆盖了其他的有效值,随后的程序运行可能会有问题。
完全不建议这样的操作,因为a[3]所在的内存可能当前是空闲的,等会就会被另外的程序引用,结果完全不可预料。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-15
数组越界,将会停止工作!类是野指针,非法使用内存!
相似回答