segmentation fault mac xvid ffmpeg

segmentation fault mac xvid ffmpeg

在MAC平臺下,編譯通過XVID,可是用FFMPEG調用時,出現segmentation fault 錯誤,不知道爲什麼?


 Segmentation   fault   是和內存有關的錯誤   
  很有可能是你的數組操作越界了   
  還比較有可能在printf()前後類型不對應   
  好好查查代碼



產生段錯誤就是訪問了錯誤的內存段,一般是你沒有權限,或者根本就不存在對應的物理內存,尤其常見的是訪問0地址。

一般來說,段錯誤就是指訪問的內存超出了系統所給這個程序的內存空間,通常這個值是由gdtr來保存的,它是一個48位的寄存器,其中的32位是保存由它指向的gdt表,後13位保存相應於gdt的下標,最後3位包括了程序是否在內存中以及程序在cpu中的運行級別,指向的gdt是以64位爲一個單位的表,在這張表中就保存着程序運行的代碼段、數據段的起始地址、與此相應的段限和頁面交換、程序運行級別還有內存粒度等等的信息。一旦一個程序發生了越界訪問,cpu就會產生相應的異常保護,於是segmentation fault就出現了





在編程中以下幾類做法容易導致段錯誤,基本是是錯誤地使用指針引起的:

1)訪問系統數據區,尤其是往系統保護的內存地址寫數據,最常見的就是給一個指針以0地址;
2)內存越界(數組越界,變量類型不一致等) 訪問到不屬於你的內存區域。


解決方法

我們在用C/C++語言寫程序的時侯,內存管理的絕大部分工作都是需要我們來做的。實際上,內存管理是一個比較繁瑣的工作,無論你多高明,經驗多豐富, 難免會在此處犯些小錯誤,而通常這些錯誤又是那麼的淺顯而易於消除。但是手工“除蟲”(debug),往往是效率低下且讓人厭煩的,本文將就“段錯誤”這個 內存訪問越界的錯誤談談如何快速定位這些“段錯誤”的語句。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章