国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

什么是野指針,如何避免?

2019-11-08 01:58:08
字體:
來源:轉載
供稿:網友

野指針:

指向不確定地址的指針變量。(即沒有初始化)使用野指針易因內存泄露出現段錯誤。而造成內存泄露的原因有兩個: 1.訪問了沒有權限的內存(平時我們正確使用指針的時候,系統應經將相應的內存分配給用戶,但是如果指向沒有分配的內存,系統會判定我們沒有權限) 2.訪問了已經釋放了的內存。 因為野指針主要是因為我們平時編程習慣造成的,因此我們只能避免野指針的出現,而不能杜絕。(請注意用詞)我們在編程時,做到以下幾點可以有效地避免野指針的出現。 第一,當一個指針沒有指向時,我們一般默認指向NULL。(NULL代表內存的0地址,并且NULL是不允許做任何操作的) 第二,使用malloc分配內存。(在堆空間里分配內存) (#)difine MAX_SIZE 1024; char ptr = (char ) maollc (sizeof (char) * MAX_SIZE); 請認真研究這樣的表達式的優點,這個表達式在代碼的維護性,擴展性都大大提高了。這方面是我們平時寫代碼時所應該提高的。 使用malloc也是有講究的,我們應該依照下面的流程: 1.分配內存。(分配成功,返回內存的首地址;分配不成功,返回NULL)。 2.檢查是否分配成功(若失敗,則 exit(1) 退出程序)。 3.清空內存中的數據 (malloc分配的空間里可能存在垃圾值,因此我們需要清空,可以用到memset或bzero 函數)。 4.使用內存。 5.釋放內存(free,這時ptr又變成野指針)。 6.寫成NULL。

舉例

int *p = new int[0]; *p = 3; 現在p指向一個內存地址,該地址所存的值是3 現在刪除這個指針: delete p; 這個時候p所指向的那個內存已經清除,值為不確定。 那么p就是野指針。這個時候對*p進行任何賦值或操作都是有潛在危險的。 正確的做法應該在刪除指針所指向的內存后,將指針賦值為0或NULL


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 荃湾区| 金沙县| 平陆县| 安远县| 大化| 皋兰县| 孝义市| 青冈县| 青川县| 临泽县| 嘉义市| 惠东县| 四会市| 南安市| 循化| 阳新县| 长宁县| 四平市| 丹凤县| 新竹县| 闸北区| 临潭县| 化德县| 柘荣县| 沙坪坝区| 东乌珠穆沁旗| 庆阳市| 曲麻莱县| 高陵县| 开阳县| 益阳市| 绿春县| 玉门市| 建瓯市| 环江| 柯坪县| 灯塔市| 鹤峰县| 长宁县| 吴川市| 灵丘县|