关于C/C++程序数组越界的思考
关于C/C++程序数组越界的思考
参照:https://www.zhihu.com/question/358909046
引言:同事在维护老的C++程序时,遇到问题:new出来的数组越界读访问为什么有时会报错?
拆分问题:
问题一:数组越界是否在对齐范围内?
范围内:实际是某种意义上合法的,肯定不会报错。
范围外:也就是说访问了无效的虚拟地址。
问题二:程序访问了无效的虚拟地址,什么情况下操作系统会收到信号,然后crash?
无效的虚拟地址在mmu中没有物理地址或者权限冲突
问题三:为什么在debug时每次new出来的数组虚拟地址不一样,但是几乎总是由同个越界处必入[1024]开始crash?
考虑数组在虚拟地址页的偏移保持一致,所以每次core的位置一样