野指针:不是NULL指针,是指向被释放的 或者访问受限的垃圾内存的指针。指针变量没有被初始化或者指针 p没被free或者delete之后没有被设置为NULL,让人误认为p是个合法的指针,此外指针操作超越了变量的作用范 围(比如不要返回指向栈内存的指针或引用,
因为栈内存在函数结束时会被释放)时也会出现野指针,所以在使用指针时首先不要忘了重要的if语句:
if(NULL==*p)
{
return ;
}
防止野指针的方式有:
1.当指针没有做初始化,也没有指向时,将指针指向NULL。int *p=NULL;初始化为NULL的目的是所指向0地址,是不允许操作不允许访问的。
2.当想给指针赋值时检查是否分配了内存空间,若没有记得malloc分配。
3.给指针分配内存后,不使用时再用free()函数清空(原来的缓冲区),并再将指针指向NULL。
void *为万能指针,可以接收任何类型的指针,但是不能对其取值(不能对他指向的空间进行操作,它只能暂时存放地址)。
空指针:
如果 p 是一个指针变量,则 p = 0; p = 0L; p = '\0'; p = 3 - 3; p = 0 * 17; 中的任何一种赋值操作之后(对于 C 来说还可以是 p = (void*)0;), p 都成为一个空指针,由系统保证空指针不指向任何实际的对象或者函数。反过来说,任何对象或者函数的地址都不可能是空指针。(比如这里的(void*)0就是一个空指针。把它理解为null pointer还是null pointer constant)。其实空指针只是一种编程概念,就如一个容器可能有空和非空两种基本状态。