1、空指针:
空指针保存一个空地址,空地址用NULL表示,其实地址为0,空指针不能随意访问;
short *pa=NULL;//pa保存0地址,pa保存空指针
//读查看
printf("pa指向的0地址保存的数据是:%#x\n",*pa);
//写修改
*pa=250;//向空地址0写入250
2、野指针
指那些释放内存,但是指针赋值为空,这时候的指针指向任意地址,好可怕,例如指向内核地址或不属于本程序的内存地址,程序会被kill,即奔溃。
内存泄漏:分为堆泄露和资源泄露 两种,内存分配失败或者内存分配成功却没有指针指向它(即无法操作该内存),会导致内存分配的越来越多,导致系统内存不够而终止程序
//野指针
int *pb;//野指针
//读查看
printf("pb指向的地址保存的数据是%#x\n",*pb);
//写修改
*pb=250; //向野指针指向的内存写入数据
3、实际开发代码编程规范:
int *pa; //不建议这么写,危险---->安全写法,假设pa指向NULL:
int *pa = NULL; //初始化为空指针
//时时刻刻判断指针是否为空
if(NULL == pa) {
printf("pa为空指针,程序不能访问.\n");
return -1或者exit(0);
} else {
printf("pa指向有效的内存区域,程序可以踏实访问.\n");
printf("%d\n", *pa); //读查看
*pa = 250; //写修改
}
安全写法,假设pa指向有效内存:
int *pa = NULL; //初始化为空指针
int a = 520;
pa = &a; //pa指向a,也就是保存有效内存的首地址
if(NULL == pa) {
printf("pa为空指针,程序不能访问.\n");
return -1或者exit(0);
} else {
printf("pa指向有效的内存区域,程序可以踏实访问.\n");
printf("%d\n", *pa); //读查看
*pa = 250; //写修改
}
如何避免产生野指针
1、在定义一个指针时初始化为NULL
2、释放指针指向的内存空间时,将指针重置为NULL