指向不確定地址的指針變量。(即沒有初始化)使用野指針易因內存泄露出現段錯誤。而造成內存泄露的原因有兩個: 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
新聞熱點
疑難解答