野指针
1. 什么是野指针
野指针是指向不可用内存的指针
2. 野指针产生原因
2.1 指针创建时未初始化
任何指针变量在创建时,不会自动初始化为NULL指针(空指针),其默认值是随机的。所以,指针变量在创建的同时应该被初始化,或者将指针置为空指针或者指向合法的地址,而不应该放置不理
2.2 指针free/delete后未置空
如果指针被free或者delete后,而指针未被置空,也会导致该指针变为野指针。虽然free和delete把指针指向的内存释放掉了,但是并没有把指针本身释放掉。
一般可以采用语句if(NULL != ptr)来进行防错处理,但是if语句起不到防错处理,因为即使ptr不为空,也不指向合法的内存块,该指针也是野指针
2.3 数组越界
指针操作了超越数组范围外的数据
3. 野指针示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char * ptr = (char *)malloc(10 * sizeof(char));
strcpy(ptr, "Hello");
printf("free before : 0x%p\n", ptr); //free释放前,指针地址
free(ptr); //free之后,应该将ptr指针设置为空
if(NULL != ptr){
printf("free after : 0x%p\n", ptr); //free释放后,指针地址
}
return 0;
}
上例中,对ptr指针进行了free操作,ptr指针指向的内存虽然被释放掉了,但是ptr指针变量本身的值并没变,所以对ptr进行判空时,并不会起到防护作用