linux c段错误,Linux C中段错误
1.什么是段錯誤?
所謂的段錯誤就是指訪問的超出了系統所給這個程序的空間,通常這個值是由gdtr來保存的,他是一個48位的,
其中的32位是保存由它指向的gdt表,后13位保存相應于gdt的下標,最后3位包括了程序是否在內存中以及程序的在cpu中的運行級別,指向的gdt
是由以64位為一個單位的表,在這張表中就保存著程序運行的代碼段以及數據段的起始地址以及與此相應的段限和頁面交換還有程序運行級別還有內存粒度等等的
信息。一旦一個程序發生了越界訪問,cpu就會產生相應的異常保護,于是segmentati fault就出現了。
通過上面的解釋,段錯誤應該就是訪問了不可訪問的內存,這個內存區要么是不存在的,要么是受到系統保護的。
2.那什么操作會引起段錯誤呢?
粗略的分一下類:
1)往受到系統保護的內存地址寫數據
有些內存是內核占用的或者是其他程序正在使用,為了保證系統正常工作,所以會受到系統的保護,而不能任意訪問。
2)內存越界(數組越界,變量類型不一致等)
3)其他
例如:
<1>定義了指針后記得初始化,在使用的時候記得判斷是否為
<2>在使用數組的時候是否被初始化,數組下標是否越界,數組元素是否存在等
<3>在變量處理的時候變量的格式控制是否合理等
3.那么我們如何去發現程序中的段錯誤呢?
通過學習前人的經驗和開發的工具,不斷的嘗試和研究,找出更恰當的方法來避免、發現并處理它。對于一些常見的地方,我們可以避免,對于一些“隱藏”的地方,我們要發現它,發現以后就要及時處理,避免留下隱患。
用gdb來調試,在運行到段錯誤的地方,會自動停下來并顯示出錯的行和行號,gdb也是最常用的,如果需要用gdb調試,記得在編譯的時候加上-g參數。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的linux c段错误,Linux C中段错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql命令实践_MySQL:常用命令
- 下一篇: c语言高低位拷贝_C语言指针详解