1. 什么是野指針?最近因為工作需要開始重新學(xué)c語言,越學(xué)越發(fā)現(xiàn)c語言深不可測,當(dāng)初用python輕輕松松處理的一些數(shù)據(jù),但是c語言寫起來卻異常的復(fù)雜,這個板塊就記錄一下我的c語言復(fù)習(xí)之路
創(chuàng)新互聯(lián)建站是專業(yè)的桐鄉(xiāng)網(wǎng)站建設(shè)公司,桐鄉(xiāng)接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行桐鄉(xiāng)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
2. 出現(xiàn)野指針的情況 指向沒有訪問權(quán)限的內(nèi)存如果一個指針指向的內(nèi)存沒有訪問權(quán)限,或者指向一塊已經(jīng)釋放掉的內(nèi)存,那么就無法對該指針進行操作,這樣的指針稱為
野指針( Wild Pointer)
#includeint main()
{char* str ;
gets(str);
puts(str);
return 0;
}
str此時并沒被分配內(nèi)存,當(dāng) gets() 函數(shù)試圖將讀取到的字符串寫入這塊內(nèi)存時,必然會發(fā)生錯誤??梢愿某梢韵麓a
#includeint main()
{char* str = (char *)malloc(20 * sizeof(char);
gets(str);
puts(str);
free(str);
return 0;
}
指向釋放掉的內(nèi)存#include#includeint main()
{char* str = (char *)malloc(20 * sizeof(char));
gets(str);
puts(str);
free(str);
puts(str);
return 0;
}
函數(shù)外部指針指向函數(shù)內(nèi)部的變量可以看到當(dāng)訪問被釋放的內(nèi)存,會出現(xiàn)奇怪的值, 這是因為
free()
只是釋放掉了動態(tài)分配的內(nèi)存, 但并未改變str
的值,str
的值不是NULL
,它仍然指向被釋放掉的內(nèi)存,這就提醒我們,使用free()
釋放內(nèi)存的同時要將指針置為 NULL,否則下次就無法判斷指向的內(nèi)存是否有效
#include#includevoid func(char *a)
{char* b = "jh666";
a = b;
}
int main()
{char *a = NULL;
func(a);
puts(a);
return 0;
}
3. 如何規(guī)避野指針此時b是在函數(shù)定義的局部變量,當(dāng)函數(shù)調(diào)用后這個變量就會給釋放掉,然后a的指向還是這個地址,那么它取得的值當(dāng)然是未知的
值得說的是把一個指針初始化為NULL肯定是比它賦值為隨機是好的,從C語言tips-NULL指針和void指針我們可以知道c語言的很多函數(shù)內(nèi)部源碼是有很多對NULL的操作的。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁名稱:C語言tips-野指針-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article4/cdhiie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、服務(wù)器托管、品牌網(wǎng)站設(shè)計、小程序開發(fā)、網(wǎng)站改版、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容