1. 程式人生 > >21 野指針

21 野指針

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 野指針