“野指针”不是 NULL 指针,是指向“垃圾”内存的指针。人们一般不会错用 NULL 指针,因为用 if 语句很容易判断。但是“野指针”是很危险的,if 语句对它不起作用。 “野指针”的成因主要有两种:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为 NULL 指针,它 的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么 将指针设置为 NULL,要么让它指向合法的内存。
例如 char *p = NULL; char *str = (char *) malloc(100);
(2)指针 p 被 free 或者 delete 之后,没有置为 NULL,让人误以为 p 是个合法的指针。 参见 7.5 节。
(3)指针操作超越了变量的作用范围。这种情况让人防不胜防,示例程序如下: class A { public: void Func(void){ cout Func(); // p 是“野指针” } 函数 Test 在执行语句 p->Func()时,对象 a 已经消失,而 p 是指向 a 的,所以 p 就 成了“野指针”。
但奇怪的是我运行这个程序时居然没有出错,这可能与编译器有关
c语言的深度学习系列转载
最新推荐文章于 2024-04-23 10:13:42 发布