程式奔潰的原因

2021-09-13 01:41:29 字數 910 閱讀 7046

常出現程式崩潰的幾種狀況1)記憶體越界

具體的**形式可為陣列下標越界和指標移動越界,在操作乙個陣列或是指標之前,要明確其邊界範圍,不應訪問不屬於系統分配的記憶體區域。

2)指標為空

即此時通過指標訪問的記憶體位址為0,這個位址系統是不允許訪問的,系統也不會分配位址為0的記憶體給程式,這屬於一種特殊的記憶體越界行為。空指標常見於未初始化或初始化(賦值)失敗的指標變數。

程式崩潰對於程式猿來說,時經常出現的問題,如果你都沒有出現過,那大佬快收下我的膝蓋吧。程式崩潰一般都發生在執行時期,而崩潰的原因一般都是程式猿的失誤所導致的,在這裡我就總結了這幾種程式崩潰的

讀取未賦值的變數

這個錯誤一般是由於程式猿粗心大意,沒有給變數初始化和賦值,導致該變數的值為髒值。

函式棧溢位

函式棧溢位一般是由兩種情況引起的: 

1、定義了乙個體積太大的區域性變數或者引數,引數和區域性變數一般都是儲存在棧中的,但是棧所佔的記憶體空間很小,在32位下只占有8m的空間,因此如果沒有使用malloc和new來在堆上建立記憶體空間的話,棧溢位就會很容易發生。 

2、函式的巢狀呼叫的層次太深了,就像無窮遞迴和無窮的迴圈呼叫一樣。

陣列訪問越界

這個是程式崩潰最常見的問題,這個就只需要程式猿仔細小心點了。

指標的目標物件不可用

指標所指向的物件要正常使用,它就必須是乙個合法的,有效的,可以訪問的物件,像當指標為空指標或者是野指標時,你再使用它程式就會立馬崩潰。而出現空指標或者野指標一般都是下面這幾種操作導致的: 

1、指標未賦值 

2、free/delete釋放了該物件 

3、不恰當的指標強制型別轉換

引數錯誤

這個就是由於程式猿的猿性導致的了,我們一般為了保證引數合法,都會設定斷言來保證只有引數合法的情況下程式才可以正常執行,因此這類錯誤一般都是由於觸發了斷言導致的。

free奔潰原因

執行時程式崩潰的問題,定位到了是free p 這個語句出錯誤,找了半天資料解決了,現在寫下一點自己的總結。這個問題有可能是以下4個原因構成,一一排查一般都可以解決 釋放乙個空指標,這個就不用多說了,短點除錯不會也會列印吧 printf x p 可以列印出16進製制數 重複釋放,這個問題也很好解決,在...

如何核心奔潰???

while 1 fork 和任何死迴圈都不能崩潰啊。只是無法跳出而已啊。空指標倒是讓記憶體溢位可以產生segmentation fault的錯誤,但是不會重啟。用alt sysrq c前需要先啟用這個功能 echo 1 proc sys kernel sysrq 也可以直接 echo c proc ...

iOS奔潰資訊收集

1,程式某處拋了乙個異常,卻未 獲,會導致std terminate函式被呼叫,std terminate呼叫std terminate handler型別的終止處理器,預設的終止處理器呼叫abort函式終止程式 2,程序收到乙個預設終止程序的訊號,大多數訊號的預設行為都是終止程序 針對第一種情況,...