关于C/C++程序数组越界的思考

关于C/C++程序数组越界的思考

 

参照:https://www.zhihu.com/question/358909046

引言:同事在维护老的C++程序时,遇到问题:new出来的数组越界读访问为什么有时会报错?

 

拆分问题:

问题一:数组越界是否在对齐范围内?

        范围内:实际是某种意义上合法的,肯定不会报错。

        范围外:也就是说访问了无效的虚拟地址。

 

问题二:程序访问了无效的虚拟地址,什么情况下操作系统会收到信号,然后crash?

    无效的虚拟地址在mmu中没有物理地址或者权限冲突

 

 

 

问题三:为什么在debug时每次new出来的数组虚拟地址不一样,但是几乎总是由同个越界处必入[1024]开始crash?

    考虑数组在虚拟地址页的偏移保持一致,所以每次core的位置一样

 

 

 

posted @ 2021-04-19 20:21  water_bear  阅读(340)  评论(0编辑  收藏  举报