什麼是野指針
隨機指向一塊內存的指針,稱爲野指針。野指針容易引起內存泄露。
非法訪問:內存資源是由操作系統管理的,使用之前要向操作系統申請。野指針訪問的那塊內存空間可能是未向操作系統申請的內存空間,因爲會被認爲是非法訪問。不是每次野指針都會報段錯誤,因爲野指針獲得的地址可能是已經向操作系統分配或申請過的變量的地址。
如何避免野指針
避免野指針,應該養成以下良好的編碼習慣:
1.當一個指針沒有指向時,將它初始化爲NULL。NULL是一個宏,(void *)0,是0地址,在操作系統中規定,不允許對地址爲0的空間作操作(如賦值)。而將它初始化的目的是:引起程序員注意,不能對其作操作,因爲在操作系統中不能對0地址作操作。
2.當要往一個指針指向的內存空間賦值時,一定要給這個指針分配空間。
int *p = malloc(sizeof(int));
3.當給指針分配空間時,要檢查分配空間是否成功。
if(p == NULL)
{
printf("malloc error!\n");
exit(1);
}
4.分配成功,使用這塊空間之前,要對這塊內存空間初始化。
memset(p,0,sizeof(int));//將p指向的內存空間全部初始化爲0
5.用完之後,將這塊內存空間釋放,將其還給系統。
free(p);
6.空間釋放完後,再次將指針指向空。因爲這個指針又變成一個野指針。
p = NULL;