版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
演武場之“我與經(jīng)典代碼”分享—段錯誤調(diào)試編制日期:2016-1-4編制人員:馬MM目錄演講目的段錯誤調(diào)試方法代碼性質(zhì)黑代碼EPS組件模塊-SPS-PAI_V11問題引入通常linux環(huán)境下的項(xiàng)目開發(fā)中,經(jīng)常會遇到段錯誤‘Segmentationfault’問題,這里我對linux環(huán)境下出現(xiàn)的段錯誤做一個簡單小結(jié)。段錯誤的產(chǎn)生段錯誤是指訪問的內(nèi)存超出了系統(tǒng)給程序所設(shè)定的內(nèi)存空間,例如訪問了不存在的內(nèi)存地址、訪問了系統(tǒng)保護(hù)的內(nèi)存地址、訪問了只讀的內(nèi)存地址等等情況。int*ptr=NULL;
*ptr=0;char*ptr="test";strcpy(ptr,"TEST");4訪問了只讀的內(nèi)存地址 charc='c'; printf("%s\n",c); intb=10;
printf("%s\n",b);在打印字符串的時(shí)候,實(shí)際上是打印某個地址開始的所有字符,但是當(dāng)你想把整數(shù)當(dāng)字符串打印的時(shí)候,這個整數(shù)被當(dāng)成了字符串的地址,然后printf從這個地址開始去打印字符,直到某個位置上的值為\0。所以,如果這個整數(shù)代表的地址不存在或者不可訪問,自然也是訪問了不該訪問的內(nèi)存——segmentationfault5我們的代碼1在我們的代碼中也出現(xiàn)過這樣的段錯誤。
chartest[1];
printf(“%c”,test[1000000000]);這里是比較極端的例子,但是實(shí)際工作中經(jīng)常會出現(xiàn),是個明顯的數(shù)組越界的問題,這個地址可能是根本就不存在的char**ppstr=NULL;printf(“*ppstr==%s\n”,(*ppstr));memcpy(*ppstr,“test”,4);memset(…7我們的代碼2錯在pathName
=
strcat(“/proc”,fileName);這行
“/proc”,是靜態(tài)字符串,字符串常量,他的存儲空間在編譯期間已經(jīng)分配,大小是固定的,不能對字符串常量進(jìn)行賦值。
你使用strcat,將fileName向"/proc"后面添加,當(dāng)然會出錯,
仔細(xì)閱讀一下strcat的用法DESCRIPTIONThestrcat()functionappendsthesrcstringtothedeststring,overwritingthenullbyte('\0')attheendofdest,andthenaddsaterminatingnullbyte.Thestringsmaynotoverlap,andthedeststringmusthaveenoughspacefortheresult.8我們的代碼3把src所指字符串添加到dest結(jié)尾處(覆蓋dest結(jié)尾處的‘\0’)。src和dest所指內(nèi)存區(qū)域不可以重疊且dest必須有足夠的空間來容納src的字符串。使用printf輸出信息這個是看似最簡單但往往很多情況下十分有效的調(diào)試方式,可以說是程序員用的最多的調(diào)試方式。為了方便使用這種方法,可以使用條件編譯指令#ifdefDEBUG和#endif把printf函數(shù)包起來(#if0和#endif)。9段錯誤的調(diào)試方法使用gcc和gdb在編譯階段加上-g參數(shù)gcc-gmain.c-omain使用gdb命令調(diào)試程序10段錯誤的調(diào)試方法11使用gdb命令調(diào)試程序12進(jìn)入gdb后,運(yùn)行程序1、在使用指針時(shí),定義了指針后記得初始化指針,在使用的時(shí)候記得判斷是否為NULL。2、在使用數(shù)組時(shí),注意數(shù)組是否被初始化,數(shù)組下標(biāo)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公樓安全保衛(wèi)管理規(guī)定(4篇)
- 瑜伽體驗(yàn)課程設(shè)計(jì)教案
- 直線式灌裝機(jī)課程設(shè)計(jì)
- 2024年職業(yè)素養(yǎng)培訓(xùn)考試題庫(附答案)
- 自動線plc課程設(shè)計(jì)
- 線上教學(xué)課程設(shè)計(jì)大賽
- 餐飲行業(yè)后勤管理工作總結(jié)
- 室內(nèi)設(shè)計(jì)師工作總結(jié)
- 餐飲行業(yè)的衛(wèi)生管理要點(diǎn)
- 客戶服務(wù)行業(yè)美工工作總結(jié)
- 醫(yī)院“無陪護(hù)”病房試點(diǎn)工作方案
- 清華大學(xué)大學(xué)物理-光的偏振
- 心理健康教育-網(wǎng)絡(luò)與青少年
- 高中英語人教版(2019) 選擇性必修一 Unit 3 課文語法填空(含答案)
- 三年級道德與法制上學(xué)期期末考試質(zhì)量分析集合3篇
- 2021-2022學(xué)年陜西省寶雞市陳倉區(qū)北師大版六年級上冊期末考試數(shù)學(xué)試卷(含答案解析)
- 應(yīng)用PDCA提高入院宣教的知曉率
- 線性系統(tǒng)理論鄭大鐘307張課件
- 2019-2020學(xué)年第一學(xué)期廣東省廣州市天河區(qū)3年級數(shù)學(xué)期末考試卷
- 纏論公式(最完美自動畫筆公式)主圖
- 肩凝證(肩周炎)的臨床路徑修改后
評論
0/150
提交評論