日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

野指针产生原因

發布時間:2023/12/8 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 野指针产生原因 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

野指針,也就是指向不可用內存區域(垃圾內存)的指針。
如果對野指針進行操作,將會使程序發生不可預知的錯誤,甚至可能直接引起崩潰。
造成野指針的原因有三種:
1.指針沒有被初始化
任何指針變量被剛創建時不會被自動初始化為NULL指針。所以,指針變量在創建的同時應當被初始化分配內存(使用malloc函數、calloc函數或new操作符),要么將指針設置為NULL,要么讓它指向合法的內存。例如:

char* p = NULL; char* str = (char*)malloc(1024);

VC++編譯器,在Debug模式下會把未初始化的棧內存上的指針全部填成 0xcccccccc ,當字符串看就是 “燙燙燙燙……”;會把未初始化的堆內存上的指針全部填成 0xcdcdcdcd,當字符串看就是 “屯屯屯屯……”。在Release模式下,編譯器則會將指針賦隨機值。
在linux,g++ 環境下,會將野指針置0,使它指向NULL。

2.指針被free或者delete后,指針指向的內存被釋放了,指針本身沒有被設置為NULL
free和delete只是把指針所指向的內存給釋放掉,但并沒有把指針本身給清理掉。這時候的指針依然指向原來的位置,只不過這個位置的內存數據已經被銷毀,此時的這個指針指向的內存就是一個垃圾內存。
所以在指針指向的內存被釋放后,應該將指針置為NULL。

3.指針超過了變量的作用范圍
即在變量的作用范圍之外使用了指向變量地址的指針。這一般發生在將調用函數中的局部變量的地址傳出來引起的。這點容易被忽略,雖然代碼是很可能可以執行無誤,然而卻是極其危險的。在執行指針的++操作時候,容易發生指針訪問越界,訪問到不該訪問的內存空間。
還有一種情況是指針指向一個臨時變量的的應用。局部變量的作用范圍雖然已經結束,內存已經被釋放,然而地址值仍是可用的,不過隨時都可能被內存管理分配給其他變量。當變量被釋放時,指針變成一個野指針。

總結

以上是生活随笔為你收集整理的野指针产生原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。