關(guān)于C/C++程序數(shù)組越界的思考
關(guān)于C/C++程序數(shù)組越界的思考
參照:https://www.zhihu.com/question/358909046
引言:同事在維護(hù)老的C++程序時(shí),遇到問(wèn)題:new出來(lái)的數(shù)組越界讀訪問(wèn)為什么有時(shí)會(huì)報(bào)錯(cuò)?
拆分問(wèn)題:
問(wèn)題一:數(shù)組越界是否在對(duì)齊范圍內(nèi)?
范圍內(nèi):實(shí)際是某種意義上合法的,肯定不會(huì)報(bào)錯(cuò)。
范圍外:也就是說(shuō)訪問(wèn)了無(wú)效的虛擬地址。
問(wèn)題二:程序訪問(wèn)了無(wú)效的虛擬地址,什么情況下操作系統(tǒng)會(huì)收到信號(hào),然后crash?
無(wú)效的虛擬地址在mmu中沒有物理地址或者權(quán)限沖突

問(wèn)題三:為什么在debug時(shí)每次new出來(lái)的數(shù)組虛擬地址不一樣,但是幾乎總是由同個(gè)越界處必入[1024]開始crash?
考慮數(shù)組在虛擬地址頁(yè)的偏移保持一致,所以每次core的位置一樣

浙公網(wǎng)安備 33010602011771號(hào)