今天看代码的时候无意中看到了一个检测数组越界的代码段:
if (size > 0) {
if (str < end)
*str = '\0';
else
end[-1] = '\0';
其中end是定义的内存空间的结束位置,如果访问越界了,就在结束前一个位置添加一个字符串结束符。
问:我在代码中发现一处代码会出现&a[-1]的情况,a是一个数组,得到的结果有时是0,有时是一个正数,谁能解释一下下标为-1的时候得到的是什么值呢,谢谢
答:数组下标为-1的地址对于数组来说是越界访问了,但是这个地址是有意义的这个地址就是所申请的数组存储空间的首地址的向前偏移一个单位(也就是偏移一个当前数组类型所对应的字节数)所对应的地址。这个地址由于没有跟着数组空间一起初始化,所以其中的数据是不一定的,如果是正在被系统或者其他APP使用中的地址空间,那么可以被访问,其中的数据的意义取决于被系统或者其他APP所写入的数据,但是访问后,有可能会引起系统或者其他APP异常。如果是没有被使用的地址,那么就是一个野地址,那么其中的数据是随机的,无意义的