21 野指針
阿新 • • 發佈:2017-08-02
del 會有 height 簡單的 print using esp ace 數據
分析下列程序,輸出結果:不確定,未定義行為。
#include<iostream> #include<stdlib.h> #include<string.h> using namespace std; void test(void) { char *str=(char *)malloc(100); strcpy(str,"hello"); free(str); if(str!=NULL) { strcpy(str,"world"); } printf(str); } int main() { test(); return 0; }
指針釋放存儲空間後沒有置為NULL,變成野指針。
分析:野指針,不能通過簡單的NULL進行判斷,delete或free只是釋放了指針所指向的內存區域,並沒有幹掉指針本身,所以指針指向的是“垃圾”指針,所以free或者delete之後要把指針置為NULL。
free(str)只是釋放了str指針所指向的內存區域,並未修改指針本身的地址值,所以str!=NULL,但是str是一個野指針(野指針 指向一個已刪除的對象或未申請訪問受限內存區域的指針),訪問內存區域是受限的。不過,本人在mac和linux平臺上運行上述代碼,雖然有警告,但是最終都輸出了world。
釋放以後按照理論是不能訪問的,如果這個時候訪問並且往裏面輸入數據的話系統不能保證數據安全,會有可能會出現world 但不代表一直會出現world。
21 野指針