关于生存期的问题,为什么数组下标越界了输出的却不是垃圾数据呢

大家可以打一下这段代码输出,看一下是什么结果,并且分析一下为什么会是这样吗?
在逐步调试监视窗口里面监视一下,你会发现一个很神奇的问题,哪位能帮忙解释一下吗?感谢

img

img

img

img

img

img

你管负的好几千万叫不是垃圾数据,那它是什么呢
你的数组是在函数里面定义的,函数结束了它的生命周期也到了,它的内存就被回收了,里面不知道被谁给占了,所以数据全都错乱了
当然也不是说一个字节不剩的都错乱,偶尔运气好有几个没有被占就还是原来的数,但是你不能期待每次都运气好,而且每次到底哪些没被占也不确定,所以这些不确定的数整个都是垃圾数据
就像厨余垃圾里面,苹果皮混合着吃剩的肉,但是你没法分离它们,就只能一起丢掉

其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址;
人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
栈中的变量通常包括函数参数和函数里声明的临时变量。
栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。
而栈中的类变量退出其作用域时,会自动执行其析构函数,……
所谓在栈中“申请”N字节的空间,其实只是将栈指针寄存器(16位sp,32位esp,64位rsp)的值多减N而已。
推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。
计算机组成原理→Shell命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……