a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > C > 正文

C語(yǔ)言中段錯(cuò)誤的問(wèn)題處理

2020-02-24 14:32:31
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

不知道大伙是不是跟武林小編一樣,當(dāng)我在linux下寫(xiě)c語(yǔ)言的時(shí)候經(jīng)常會(huì)遇到段錯(cuò)誤,為此,今天我們就來(lái)仔細(xì)研究一下,給出C語(yǔ)言中段錯(cuò)誤的問(wèn)題處理。

?
段錯(cuò)誤或段違規(guī)(segmentation violation)
查看Expert C Programming(Peter Van Der Linden) Pg.156
解釋到段錯(cuò)誤是由于內(nèi)存管理單元(MMU)的異常所致,
而該異常則通常是由于解除引用一個(gè)未初始化或非法的指針引起.

就是指針正在引用一個(gè)并不位于你的地址空間中的地址.
書(shū)中的例子

?

int *p = 0;?
*p = 17;?


這里顯然 地址0 并不是你程序所在的地址空間 所能得到的
而我在試驗(yàn)的時(shí)候 幾乎隨便給個(gè)地址 都是段錯(cuò)誤
這也很正常,在運(yùn)行之前是很難知道系統(tǒng)給你分配的地址空間的.
?
于是我這樣測(cè)試了一下

?

?

?


int *p = 0;?
?int a = 7;?

?printf("a addr is %d/n",&a);?
?scanf("%ld",&p);?

?printf("%d",*p);


由于 變量a的地址肯定在系統(tǒng)給你的程序所分配的地址空間內(nèi)
所以你按照a的地址 給p賦值
或者小數(shù)目的向上下移4的整數(shù)倍 都是沒(méi)問(wèn)題的
經(jīng)測(cè)試 并無(wú)段錯(cuò)誤

分析了一下原因
在linux中,當(dāng)你malloc一段內(nèi)存的時(shí)候 只是拿到了 這段內(nèi)存的虛擬地址.而這段虛擬地址也名沒(méi)有實(shí)質(zhì)的映射到物理地址.
而只有當(dāng)你使用這段內(nèi)存的時(shí)候.系統(tǒng)會(huì)申請(qǐng)相應(yīng)頁(yè)表映射到相應(yīng)的物理地址.
而*p直接隨意指向一個(gè)虛擬地址? 而這個(gè)虛擬地址并沒(méi)有實(shí)際的物理地址與之映射.
這時(shí)候解引用會(huì)在MMU發(fā)出異常,返回到linux就會(huì)給用戶報(bào)一個(gè)段錯(cuò)誤.
而如果你定義1個(gè)int型變量 這個(gè)應(yīng)該是一個(gè)棧地址 內(nèi)核已經(jīng)把它映射到一個(gè)實(shí)際的物理頁(yè)
你在這個(gè)基礎(chǔ)上小幅度上下偏移地址.相應(yīng)的都應(yīng)該有物理地址與之映射.
自然沒(méi)有問(wèn)題.

以上都是武林技術(shù)小編自己的個(gè)人理解,可能還有不足的地方,在此虛心歡迎大家交流指教!

?

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 成人福利网 | 国产一区在线不卡 | 久久精品天堂 | a视频在线观看免费 | 在线精品一区二区 | 国产美女精品人人做人人爽 | 中文成人在线 | 午夜视频在线观看网站 | 成人做爰www免费看视频网站 | 午夜剧场黄 | av免费网站 | 久久久久国产 | 日韩一区二区精品 | 在线观看欧美一区二区三区 | 夜本色| 国产一区二区三区在线看 | www国产亚洲精品久久网站 | 国产精品久久久久久久久久99 | 午夜精品一区二区三区在线播放 | 欧美影 | 欧美黄视频在线观看 | 一本色道久久综合狠狠躁篇的优点 | 色草在线 | 亚洲黄色毛片 | 日韩精品极品在线观看 | 欧美一区二区三区电影 | 国产成人精品视频在线观看 | 黄色a在线观看 | 国产又粗又长又硬又猛电影 | 激情婷婷| 午夜在线观看视频 | 精品国产乱码久久久久久久软件 | 欧美日韩国产高清视频 | 综合久久一区二区三区 | 国产成人a亚洲精品 | 五月天婷婷激情视频 | 能在线观看的黄色网址 | 日韩精品一区二区三区 | 国产一区二区欧美 | 欧美成人精精品一区二区频 | 91视频在线 |