C++中野指针和空指针和无类型指针
来源:互联网 发布:定制棕垫 知乎 编辑:程序博客网 时间:2024/06/07 07:10
转自:http://blog.csdn.net/chenguolinblog/article/details/27054267
一. 野指针
所谓的野指针指的是一个指针变量指向了不可使用的内存空间。
产生野指针三个原因:
(1)指针变量创建时候没有被初始化:任何指针变量在创建的时候,不会自动成为NULL指针,它的默认值是随机的,因此该指针就会成为一个野指针,可能指向一块不可使用的内存空间。
例如char *p; 这样创建一个指针p,指向一个随机的内存地址空间
所以指针在创建的时候要被初始化,可以讲其初始化为NULL,或指向合法的内存空间
比如 char *p = NULL ; 或 char *p = new char; //这个时候p就不会是一个野指针
(2)delete或free指针之后没有把指针设置为NULL:delete和free只是把指针所指的内存空间释放掉,而没有对指针本身进行释放。
比如char *p = new char(4) ; delete[] p; //这时候指针p所指的内存空间被释放,但是指针p本身不为空,但是指针p所指向的内存空间已经不能使用,造成了野指针。正确的做法是及时的把指针p赋值为NULL
例如下面这个程序
char *p = (char *)malloc(100);
strcpy(*p, "hello");
free(p);
if(p != NULL){
printf("not NULL\n");
}
结果输出”not NULL“,验证上面的结论,应该在free之后马上把p = NULL。
(3)指针操作超过了指向内存空间的作用范围:当指针越界之后也会变成一个野指针
二. 空指针
空指针是一种特殊的指针,表示当前这个指针变量处于空闲状态,没有指向任何有意义的内存空间。
C++中用NULL来表示空指针,NULL是一个符号常量值为0。
三. 无类型指针
无类型指针指的是void *这种指针,表示可以指向任何数据类型。
比如
int n = 3;
int *p = NULL; //说明指针p此时空闲,没有指向任何有意义的内存空间
void *gp = &n; //无类型指针gp指向整型变量n
p = (int *)gp; //把无类型指针转换为整型指针
printf("%d\n", *p);
结果输出3,说明无类型指针可以转换成任何数据类型的指针。
- C++中野指针和空指针和无类型指针
- C++中野指针和空指针和无类型指针
- 【Objective-C】空指针和野指针
- 野指针和空指针
- 空指针和野指针
- 空指针和野指针
- 野指针和空指针
- 空指针和野指针
- 空指针和野指针
- 空指针和野指针
- 野指针和空指针
- 野指针和空指针
- 野指针、空指针和通用指针
- 空指针和void *类型指针
- 指针类型和指针
- 【Objective-C】09-空指针和野指针
- 【Objective-C】09-空指针和野指针
- 【Objective-C】09-空指针和野指针
- Android——Drawable
- Oracle数据库(七)处理数据
- WM_QUIT消息
- c#——list中元素转化(ConvertAll select foreach)
- 创建单例
- C++中野指针和空指针和无类型指针
- 汇编写的基于DOS窗口的记事本
- Linux命令查看以及编程获取CPU核数
- .html 、.htm 、 .shtml 以及 .shtm 四种扩展名的文件区别
- PCB设计中内层孤岛是什么意思?
- PeekMessage
- android 下载速度Kb/s和Kbps的转换
- MySQL order by的一个优化思路
- iOS 警告消除(收集)