C++数组越界问题

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

发布了47 篇原创文章 · 获赞 20 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/boiled_water123/article/details/104271190