空指针:
在C语言里,泛型编程靠void类型来实现。即“一切皆空”,那么void类型的指针,是不是大大的提供了某些方便!在使用void*类型的指针时应该注意一下问题:(类型转换!)
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=10;
6 void *p=&a;
7
8 int b= (int)*p;// 类型强转,错误!
9
10 return 0;
11 }
以上显然是错误的!因为在强转时,转换的是指针类型而不是普通类型。应先解引用,再转换!应该这样写:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=10;
6 void *p=&a;
7
8 int b= *(int*)p;// 类型强转, 正确!
9 printf("%d\n",b);
10 return 0;
11 }
野指针:
所谓“野指针”,即指向一个非法的或者已经销毁的内存的指针,它存在于使用指针前于使用指针后!那么以下提供两种方式来避免野指针:
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main()
4 {
5
6 int *p;// 指针变量未初始化,危险!
7 printf("%p\n",p);
8
9 int *pp=(int*)malloc(4);
10 free(pp);
11 printf("%p\n",pp);//指针变量未清空已销毁地值,危险!
12
13 return 0;
14 }
以上两种情况,分别是使用指针之前与使用指针变量之后,都是不合理,不安全的!使用前,应先将指针置为空!,使用后应该将指针变量的地址值置为空,否则即野指针!!!
1 #include <stdio.h>
2 #include <stdlib.h>
3 int main()
4 {
5
6 int *p=NULL;// 正确
7 printf("%p\n",p);
8
9 int *pp=(int*)malloc(4);
10 free(pp);
11 pp=NULL;
12 printf("%p\n",pp);//正确!
13
14 return 0;
15 }
~
这里还要注意malloc函数只能对堆区内存释放,不可释放栈区!栈区是自动释放的!!!并且它返回的是void*类型!!!
---------------------
作者:杜重阳
来源:CSDN
原文:https://blog.csdn.net/dcy15244/article/details/78414663
版权声明:本文为博主原创文章,转载请附上博文链接!