简述空指针,野指令以及c 内存泄露的预防区别和联系,并给出预防方法

野指针?空指针?
野指针指的是指向不可用内存的指针。任何指针变量在被创建时,不会自动成为NULL指针(空指针),其缺省值是随机的,所以,指针变量在创建的同时应当被初始化,或者将指针设置为NULL,或者让它指向合法的内存,而不应该放之不理,否则就会成为野指针。而同时由于指针被释放(free或delete)后,未能将其设置为为NULL,也会导致该指针变为野指针。虽然free和delete把指针所指的内存给释放掉了,但它们并没有把指针本身干掉,一般可以采用语句if
NULL)进行防错处理,但是if语句却起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。第三种造成野指针的原因是指针操作超越了变量的作用范围。
例如如下程序示例。
int main()
char *p = (char *) malloc(100);
strcpy(p, "hello");
if(p != NULL)
&&&&&&&&&&&&&
printf("Not NULL\n");
程序输出为
上例中,虽然对p执行了free操作,p
所指的内存被释放掉了,但是p所指的地址仍然不变,在后续的判断p是否为NULL时,根本没有起到防错的作用,所以程序输出仍然为Not
空指针是一个特殊的指针,也是唯一一个对任何指针类型都合法的指针。指针变量具有空指针值,表示它当时处于闲置状态,没有指向有意义的内容。为了提高程序的可读性,标准库定义了一个与0等价的符号常量NULL,程序里可以写
p = 0 或者 p =
NULL,两种写法都把p置为空指针值。C语言保证这个值不会是任何对象的地址。给指针值赋零则使它不再指向任何有意义的东西。
作为一种风格,很多程序员一般不愿意在程序中到处出现未加修饰的 0,所以习惯定义预处理宏 NULL(在
和其它几个头文件中)为空指针常数,通常是0 或者 ((void *)0)。希望区别整数0和空指针0的人可以在需要空指针的地方使用
通用指针可以指向任何类型的变量。通用指针的类型用(void *)表示,因此也称为void 指针。
例如如下程序代码:
int main()
int n=3, *p;
printf("%d\n",*p);
程序输出为
原创文章,转载请注明: 转载自
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 空指针异常 的文章

 

随机推荐