#野指针#
## 造成野指针的原因 ##
1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。
2、指针P被FREE或者DELETE之后,没有置为NULL,让人误以为P是个合法的指针。
3、指针操作超越了变量的作用范围。这种情况让人防不胜防。
##避免出现野指针的一些方法##
(1) 声明指针时要进行初始化;
int *p = NULL;
(2) 指针删除时要用对操作符;
对于new 出来的单个指针,用delete进行释放
对于new 出来的指针数组,如int[],要用delete []进行释放
mallocc 出来的指针用free释放
注:关于delete和delete []的详细使用介绍,请参考Effective C++条款16
(3)释放指针后要给指针NULL地址
delete [] pointer;
pointer = NULL;
(4)可以在分配完内存以后使用ASSERT进行检验
int *p = 5;
ASSERT(int != NULL);
如果这样写的话,一旦条件判断不成立则程序会终止运行。主动终止程序总比运行时被迫崩溃的好,至少方便找出Bug的位置^_^。
[ASSERT的详细介绍][1x]
[1x]:<https://www.cnblogs.com/daochong/p/6571849.html>
## 造成野指针的原因 ##
1、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的默认值是随机的,它会乱指一气。
2、指针P被FREE或者DELETE之后,没有置为NULL,让人误以为P是个合法的指针。
3、指针操作超越了变量的作用范围。这种情况让人防不胜防。
##避免出现野指针的一些方法##
(1) 声明指针时要进行初始化;
int *p = NULL;
(2) 指针删除时要用对操作符;
对于new 出来的单个指针,用delete进行释放
对于new 出来的指针数组,如int[],要用delete []进行释放
mallocc 出来的指针用free释放
注:关于delete和delete []的详细使用介绍,请参考Effective C++条款16
(3)释放指针后要给指针NULL地址
delete [] pointer;
pointer = NULL;
(4)可以在分配完内存以后使用ASSERT进行检验
int *p = 5;
ASSERT(int != NULL);
如果这样写的话,一旦条件判断不成立则程序会终止运行。主动终止程序总比运行时被迫崩溃的好,至少方便找出Bug的位置^_^。
[ASSERT的详细介绍][1x]
[1x]:<https://www.cnblogs.com/daochong/p/6571849.html>