关于数组越界(内存泄漏)的那点事儿(C语言)
数组越界在C语言是一个很常见的问题,但是也正是因为它很常见,有时候也会出现一些不可思议,难以理解的情况,就像下面这样。
情形如下:
如果难以理解,我们来打印一下数组a每个节点的地址以及num的地址。
如下:
我们可以看到,当数组a循环到a[12]的时候与num的地址完全相同。从而覆盖了num已有的值12,变成a[ ] = 0的值,即0。重新累加。
我们思考可以发现,此时num跟a[9]相差8个字节的偏移量。那么我们会想,不管num是任意数据类型,都会只差8个字节的大小呢?
因此我做了以下实验:
发现此时相差12个字节的偏移量,因此并不是固定且有规律只相差8个字节的偏移量,与num的数据类型是相关联的。
总结:内存是连续的线性排布。且与编译器处理的安全隔离相关联。(编译器不同处理方式可能不同)