C-对野指针的理解

C做作业时无意写了以下代码


char *p;
gets(p);
//输入 helloworld
printf("%s",p);
gcc 编译正常,后来多多同学贴到 vc 发现有问题。

查资料知,这里涉及到了野指针的问题
char *p;  //野指针,无内存空间,不能存放数据!

成因:
(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存
注意:

NULL是系统定义的常量,没有类型限定的0值。一般用来初始化一个指针变量,以标识指针未指向任何地址,或者说空指针,

(2)指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针

(3)指针操作超越了变量的作用范围