c 中幾個段錯誤除錯記錄

2021-08-02 03:52:04 字數 919 閱讀 4798

1  執行緒中呼叫乙個外部函式出現 段錯誤,但是在主線程中卻正常

解決方法:將該執行緒的stack_size設定大一點,因為外部函式可能需要的記憶體資源比較多,預設的stack_size不夠

設定方法如下:

bool start(void*(*thread_proc)(void*),void* arg,size_t stack_size=16*1024)

return res==0;

}

2  pthread_create 方法傳入的方法只能是乙個靜態方法,如果需要用成員函式,可以在類裡新增乙個static的中間方法,將物件當作引數傳進去,在中間方法中呼叫物件的方法即可。

申明:

static void* thread_proc_callback(void* arg);

void proc_callback();

實現:

void ccamera::proc_callback()

cout<<"proc_callback exit...."}

呼叫:

thread_event.start(thread_proc_callback,(void*)this)

記得最後乙個引數this,否則proc_callback()裡面將會出現this=0,段錯誤。

3  pure virtual method called 錯誤

如果父類中有乙個純虛函式,子類實現,父類中有個執行緒在持續呼叫該虛函式。在構析該物件時,就會出現呼叫純虛函式的錯誤,這是因為,構析的時候,子類先進行構系,因此方法的子類實現被構析,執行緒裡面呼叫時,只能呼叫父類的了,但是父類中是純虛函式。

解決方法,要麼在父類中實現純虛函式,要麼構析前先將執行緒kill掉

段錯誤除錯

1 gdb除錯 1 第一步是使用帶有除錯標誌 debugging flags 的方式編譯這段 如下 gcc g segfault.c 2 執行可執行程式 gdb a.out 進入gdb模式 gdb run 執行程式 starting program home dgawd cpsc 363 a.out...

段錯誤除錯

核心轉儲core dumped 概念 當 個程序要異常終止時,可以選擇把程序的使用者空間記憶體資料全部儲存到磁碟上,檔名通常是core,這叫做core dump。也叫核心轉儲,幫助開發者進行除錯,在程式崩潰時把記憶體資料dump到硬碟上,讓gdb識別 乙個程序允許產生多大的core檔案取決於程序的 ...

Linux段錯誤除錯

1.單步除錯 編譯時加上 g,然後用gdb除錯,自然就知道出現段錯誤的地方在哪。2.利用core檔案來進行除錯 用ulimit c來檢視core檔案的最大值,如果是0就不會產生core檔案。此時可用ulimit c 1000將core檔案的最大值設定為1000k。ulimit c 1000只會影響當...