1.定义指针变量时,必须将指针变量初始化为NULL(为空),否则,指针变量会由于初始化位置的不确定而变成野指针;(其实遵循引用变量之前,变量必须初始化这条规则就很好理解)
例子:
int *p;
p=NULL;或者 int *p=NULL;
就是说 定义指针变量,如果不赋给它地址,系统会随机给它分配一个地址。
野指针会造成一些意想不到的结果,如果引用了,还可能造成系统崩溃。所以c里面明确规定不能出现野指针。
int *p; int a=10; int b=a+*p; 如果你没有将p设为null,那么如果编译器又没有报错的情况下,你会得到b的值,可能每次都会有不同,你往回找很难发现错误
定义但是不赋值的指针叫做野指针。野指针指向不明,对程序有不可知的后果,引用了更是出大问题,所以,c语言严格反对野指针。
因为程序在执行的时候,为变量分配内存空间,如果没有给变量分配初始值的话,那么变量空间中的值,是一个以前使用过的垃圾值(即无用的),你不知道它是什么,特别是指针变量,如果不赋初值,就使用的话,可能导致内存崩溃.其实指针也是变量,并不必须在初始化时赋值为NULL。只需要在你使用该指针变量的时候确定这个变量有一个明确的值,也就是地址。但为了养成良好的变成习惯,最好在定义变量的时候初始化NULL也是一个地址(0),不指定地址就随机给你一个。
int a; //打印a的值,会输出一个不确定的值, int *p;//跟a是一样的道理,这时的p指向的地址是你所不知道的一个地址。2.分配指针1)int *p=NULL;//防止出现野指针int a=5;
p=&a;
2) int *p=NULL;p=(int *)malloc(sizeof(int)*100);//注意,malloc 函数返回的是 void * 类型,所以需要强制类型转换if(P==NULL){printf(“malloc mem fail \n”);
goto XX;
}......free(p);//释放掉了指针所指向的那一段内存空间,使其变成“垃圾”内存(不可用内存)if(p!=NULL)p=NULL;//防止出现野指针....
int *p=NULL; *p=9; 试了一下发生了段错误,这个如何理解?
-
提问者评价
-
不错!,当上面的p=NULL后以后还用的时候还可以使用p吗? ??