空指针:
- 定义:是一个被赋值为NULL的指针,它不指向任何的对象或者函数。
- 注意事项:
1、使用指针的第一件事就是需要看这个指针是否是空指针(坚决不能使用空指针,否则程序就会崩。意思就是:为一个指针赋值为空指针不会报错,但是在我们想访问的时候会报错(系统不允许我们读取地址为0的数据)
判断空指针的方法:if(p!=NULL){};//NULL是空指针的意思//若明确指针该指针有指向,则不需要做判断,若不知道,则要做判断
野指针:
野指针不同于空指针,空指针是指一个指针的值为NULL,而野指针的值并不为NULL,野指针会指向一段实际的内存,只是它指向哪里我们并不知情,或者是它所指向的内存空间已经被释放,所以在实际使用的过程中,我们并不能通过指针判空去识别一个指针是否为野指针。(野指针可能指向一个可用的,但是正在被使用的空间,如果对它进行操作是非常危险的,程序可能会崩溃,数据也会可能被破坏),避免野指针只能靠我们自己养成良好的编程习惯。
建议:
1、在声明指针的时候,就应该对其进行初始化,即让他指向NULL值
int *p = NULL;
2、使用指针前进行判断:
if (p == NULL)
{
...
}
else
{
....
}
3、释放指针后将其指向NULL
如果堆上的内存已经被释放,但是指向该内存的指针如果没有人为的修改过,那么指针还会继续指向这段堆上已经被释放的内存,这时还通过该指针去访问堆上的内存,就会造成不可预知的结果
int *p = new int();
...
delete p;
p = NULL;
4、动态申请操作必须和释放操作匹配,防止内存泄露和多次释放。谁申请,谁释放。
5、牢记数组的长度,防止数组越界操作,考虑使用柔性数组,使用结构体struct来定义柔性数组。
参考文章:
C/C++野指针
[C++]野指针及其危害