版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
常見的內(nèi)存錯(cuò)誤及其對策第1頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤1:內(nèi)存分配未成功,卻使用了它起因沒有意識到內(nèi)存分配會不成功編程新手容易犯解決對策在使用內(nèi)存之前,檢查指針是否為空指針(NULL)
if(p==NULL) { printf("Noenoughmemory!\n"); exit(0); }第2頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤2:內(nèi)存分配成功,但是尚未初始化就引用它起因沒有初始化的觀念誤以為內(nèi)存的默認(rèn)值全為0解決對策即使是賦0值也不可省略,不要嫌麻煩第3頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤3:內(nèi)存分配成功,并且已經(jīng)初始化,但操作越過了內(nèi)存的邊界例如:使用數(shù)組時(shí)經(jīng)常發(fā)生下標(biāo)“多1”或者“少1”的操作解決對策:在for語句中,注意循環(huán)次數(shù)不要搞錯(cuò)第4頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤4:忘記釋放內(nèi)存,造成內(nèi)存泄漏(MemoryLeak)“內(nèi)存泄露”一詞類似“原料泄露”泄露出去的原料不能被利用,導(dǎo)致生產(chǎn)過程中原料不足好比借東西不還如果申請來的內(nèi)存不用,別的程序也不能用,就好像這塊內(nèi)存泄露出去一樣,造成浪費(fèi)第5頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策特征含有這種錯(cuò)誤的函數(shù),每被調(diào)用一次,就丟失一塊內(nèi)存(制造內(nèi)存垃圾)剛開始時(shí),系統(tǒng)內(nèi)存充足,看不到任何錯(cuò)誤當(dāng)系統(tǒng)運(yùn)行相當(dāng)一段時(shí)間后,就會突然死掉,出現(xiàn)提示:內(nèi)存耗盡需長期穩(wěn)定運(yùn)行的服務(wù)程序?qū)?nèi)存泄漏最敏感嚴(yán)重程度取決于每次遺留內(nèi)存垃圾的多少代碼被調(diào)用的次數(shù)第6頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策解決對策在需要的時(shí)候才malloc,并盡量減少malloc的次數(shù)malloc的執(zhí)行效率就不高,過多的malloc使程序性能下降能用自動變量解決的問題,就不要用malloc來解決malloc一般在大塊內(nèi)存分配和動態(tài)內(nèi)存分配時(shí)使用重復(fù)使用malloc申請到的內(nèi)存盡量讓malloc和與之配套的free在一個(gè)函數(shù)或模塊內(nèi)盡量把malloc集中在函數(shù)的入口處,free集中在函數(shù)的出口處以上做法只能盡量降低產(chǎn)生泄露的概率。完全杜絕內(nèi)存泄露,關(guān)鍵要靠程序員的細(xì)心與責(zé)任感第7頁,共15頁,2023年,2月20日,星期一一個(gè)例子voidInit(void){pszMyName=(char*)malloc(256);
if(pszMyName==NULL){
return;}pszHerName=(char*)malloc(256);
if(pszHerName==NULL){
return;}pszHisName=(char*)malloc(256);
if(pszHisName==NULL){
return;}
……
free(pszMyName);free(pszHerName);free(pszHisName);
return;}
錯(cuò)在哪里!第8頁,共15頁,2023年,2月20日,星期一一個(gè)例子voidInit(void){pszMyName=(char*)malloc(256);
if(pszMyName==NULL){
return;}pszHerName=(char*)malloc(256);
if(pszHerName==NULL){
free(pszMyName);
return;}pszHisName=(char*)malloc(256);
if(pszHisName==NULL){
free(pszMyName);free(pszHerName);
return;}
……
free(pszMyName);free(pszHerName);free(pszHisName);
return;}第9頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤5:釋放了內(nèi)存,卻繼續(xù)使用它起因:指針?biāo)傅膬?nèi)存被釋放以后,并不表示指針會消亡其地址仍然不變(非NULL),只是該地址對應(yīng)的內(nèi)存是垃圾指向垃圾內(nèi)存的指針是“野指針”…free(ptr); if(ptr!=NULL)//不起作用{ …}第10頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策char*GetInput(void)
{
chars[80];
scanf("%s",s);
returns;
}
warningC4172:returningaddressoflocalvariableortemporary輸出亂碼voidGetInput(char*s)
{
scanf("%s",s);
}
錯(cuò)在哪里!不能把局部變量的地址作為返回值返回函數(shù)返回后,局部變量被釋放,該地址的內(nèi)存會被挪做它用第11頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策#include<stdio.h>#include<stdlib.h>voidGetInput(char*p){ p=(char
*)malloc(100);}程序崩潰,函數(shù)不能傳遞動態(tài)分配的內(nèi)存?voidGetInput(char
**p){
*p=(char*)malloc(100);}第12頁,共15頁,2023年,2月20日,星期一常見的內(nèi)存錯(cuò)誤及其對策常見錯(cuò)誤5解決對策盡量把malloc集中在函數(shù)的入口處,free集中在函數(shù)的出口處如果free不能放在函數(shù)出口處,則指針free后立即設(shè)置為NULL不要把局部變量的地址作為返回值返回,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動銷毀指針要么初始化為NULL,要么是其指向合法的內(nèi)存第13頁,共15頁,2023年,2月20日,星期一非法內(nèi)存操作起因內(nèi)存分配未成功,卻使用了它內(nèi)存分配成功,但是尚未初始化就引用它內(nèi)存分配成功,并且已經(jīng)初始化,但操作越過了內(nèi)存的邊界釋放了內(nèi)存,卻繼續(xù)使用它基本特征代碼訪問了不該訪問的內(nèi)存地
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年個(gè)人住宅買賣合同范本及要點(diǎn)分析3篇
- 2024年社保代繳合同模板
- 2025年醫(yī)用植入材料合作協(xié)議書
- 二零二五年度XX房地產(chǎn)抵押貸款合同模板
- 2025年空氣和廢氣監(jiān)測儀器項(xiàng)目合作計(jì)劃書
- 2024年中國氣體流量計(jì)市場競爭策略及投資可行性研究報(bào)告
- 2025年中國異惡草松原藥行業(yè)競爭格局分析及投資規(guī)劃研究報(bào)告
- 二零二五年廢鋼貿(mào)易融資服務(wù)合作協(xié)議3篇
- 2023-2029年中國血管支架行業(yè)市場發(fā)展現(xiàn)狀及投資規(guī)劃建議報(bào)告
- 2024年購房按揭貸款抵押權(quán)合同范本版B版
- 水稻田稻鴨共棲技術(shù)要點(diǎn)
- 肺功能科室工作報(bào)告
- 如何訓(xùn)練寶寶獨(dú)立就寢
- 血常規(guī)報(bào)告單
- 寶寶大便觀察及護(hù)理課件
- 學(xué)校最小應(yīng)急單元應(yīng)急預(yù)案
- 一年級第一學(xué)期口算題(20以內(nèi)口算天天練-15份各100題精確排版)
- 公司月度安全生產(chǎn)綜合檢查表
- 重慶市康德卷2023-2024學(xué)年物理高二上期末綜合測試試題含解析
- 七年級音樂下冊 第4單元《北京喜訊到邊寨》課件1 花城版
- 飛行員獻(xiàn)身國防志愿書1000字
評論
0/150
提交評論