【C++】野指针及其危害
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                【C++】野指针及其危害
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                【C++】 野指針及其危害
引言:小白在初期敲代碼時最可能碰到的問題之一估計就是野指針了,因為它在寫程序的時候一不注意就寫出來了,且不容易被發現,調試半天可能也不會出結果。去找大佬一看,其實就是一個很簡單的野指針問題,那么我們今天就來學習一下關于野指針的問題,以及怎么在敲代碼時如何規避它。
什么是野指針呢?
 答:“野指針”并不是NULL指針,而是在定義上沒有初始化,值為隨機,又或者是指向了已經被釋放內存了的指針或是指向越界的變量作用域的指針。
野指針的成因:
- ①指針變量沒有被初始化。首先我們要知道,任何指針變量剛被創建時不會自動成為NULL指針,它的默認值是隨機的,可能會指向任意位置。所以,指針變量在創建時的最開始就應該及時對其初始化,要么將其置為NULL,要么讓它指向一塊合法的內存。
- ②指針ptr被free或者delete之后,只是釋放了ptr所指向的內存,而沒有把指針ptr干掉,且沒有及時被置為NULL,當后邊用到它時,以為它任然是合法的。
- ③指針操作超越了變量所在的作用域,意思是返回了指向棧內存的指針或引用,因為棧內存在函數結束時就會被釋放掉。
野指針的危害:
 下面我們通過一段代碼來分析一下:
解析:
-  ①代碼第1行,沒有問題,聲明了一個short*型的指針,并且沒有初始化,為后邊買下炸彈。
 ②代碼第2行,沒有問題,聲明了一個20個元素的數組,每個元素都是short型的。
 ③代碼第3行,沒有問題,聲明了short類型的變量var,并且初始化為0X20。
 ④代碼第4行,有錯誤,此處將bufptr指針指向的內容賦值為var變量的值,因為bufptr在最開始并沒有被初始化,是一個“野指針”,因此對他指向的內容操作是非常危險的,會導致程序崩潰。為了杜絕這種錯誤操作,我們可以將bufptr進行正確初始化,應該將第一行改為short *bufptr=(short*)malloc(sizeof(short)); ⑤代碼第5行,沒有問題。把bufarray的第一個元素賦值為變量var的值。
野指針危害總結:
- 1.指向不可訪問的一段地址,觸發段錯誤。
- 2.指向一個可用的,但是正在被使用的空間,如果在此時對這段空間解引用后,對其加以修改或者釋放,但是這段空間正在被使用,這是非常危險的操作,程序會崩潰,數據也會可能被破壞。
C/C++語言中使用指針的規則,避免野指針
- 1、用malloc申請了內存之后,應該立即檢查指針值是否為NULL,防止使用值為NULL的指針。
- 2、動態申請操作必須和釋放操作匹配,防止內存泄露和多次釋放。誰申請,誰釋放。
- 3、牢記數組的長度,防止數組越界操作,考慮使用柔性數組,使用結構體struct來定義柔性數組。
- 4、free指針之后必須立即賦值為NULL。
總結
以上是生活随笔為你收集整理的【C++】野指针及其危害的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: arista eos系统从零开始研究(1
- 下一篇: android qq账号登陆验证手机号码
