C++中野指针和空指针和无类型指针

简介: 一. 野指针 所谓的野指针指的是一个指针变量指向了不可使用的内存空间。 产生野指针三个原因: (1)指针变量创建时候没有被初始化:任何指针变量在创建的时候,不会自动成为NULL指针,它的默认值是随机的,因此该指针就会成为一个野指针,可能指向一块不可使用的内存空间。


一. 野指针

所谓的野指针指的是一个指针变量指向了不可使用的内存空间。

产生野指针三个原因:

(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,说明无类型指针可以转换成任何数据类型的指针。


目录
相关文章
|
25天前
|
算法 编译器 数据库
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
【C++ 泛型编程 高级篇】使用SFINAE和if constexpr灵活处理类型进行条件编译
243 0
|
25天前
|
JSON JavaScript 前端开发
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
C++ 智能指针与 JSON 处理:高级编程技巧与常见问题解析
255 0
|
25天前
|
设计模式 程序员 C++
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
【C++ 泛型编程 高级篇】C++模板元编程:使用模板特化 灵活提取嵌套类型与多容器兼容性
241 2
|
11天前
|
存储 C++
C++指针
C++指针
|
22天前
|
存储 编译器 C语言
【c++】类和对象(二)this指针
朋友们大家好,本节内容来到类和对象第二篇,本篇文章会带领大家了解this指针
【c++】类和对象(二)this指针
|
23天前
|
存储 编译器 C语言
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
【C++练级之路】【Lv.2】类和对象(上)(类的定义,访问限定符,类的作用域,类的实例化,类的对象大小,this指针)
|
25天前
|
存储 安全 数据库连接
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
【C++智能指针】深入探究C++智能指针:自定义删除器的设计与选择
82 0
|
22天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
32 0
存储 编译器 Linux
18 0
|
2天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”

热门文章

最新文章