1、野指针和悬挂指针
野指针是指没有初始化的指针;悬挂指针是指指向的内存已经被释放的指针。野指针和悬挂指针都是指向不安全不可控的内存,如果操作该指针会发生意想不到的结果。
如何避免?
- 定义指针要初始化
- 释放指针后赋值NULL
- 使用智能指针
2、NULL和nullptr区别
- NULL不是关键字,它是宏。
#define NULL 0
或
#define NULL (void*)0
- nullptr是nullptr_t的一个实例。
注意:NULL在C++中表示空指针时具有二义性问题
在C语言中用NULL表示空指针,使用(void *)0赋值会隐式类型转换为对应的指针类型。在C++中不能把(void *)0隐式转换成其它类型,所以NULL只能用0表示空指针,但在函数重载时会出现二义性问题。最终C++11引入nullptr来解决这个问题。