C++野指针 空指针 危险指针

简介: C++野指针 空指针 危险指针

 哈喽 小伙伴大家好 新年已经接近尾声 本篇文章就来介绍一下C++危险指针 空指针 野指针

C++危险指针:

在C++中,"危险指针"通常指的是那些未经初始化、越界访问、空指针解引用、野指针(dangling pointers)或者未释放内存等可能导致程序崩溃或未定义行为的指针。使用这些指针是非常危险的,因为它们可能导致程序崩溃、数据损坏、安全漏洞等。

空指针:

定义空指针是一个特殊的指针,它不指向任何有效的内存地址。在C++中,通常使用nullptr(C++11及以后版本)或者NULL(C++98及以前版本,NULL通常被定义为(void*)0)来表示空指针。

野指针:

定义野指针是指向无效内存地址的指针,通常是因为指针被释放或未初始化,但指针变量本身没有被置为nullptr,因此它仍然指向原来的内存地址,但这个地址可能已经被系统分配给其他变量或已经被释放。

1.未初始化的指针

int *p; // p指向一个随机的内存地址,使用它之前必须初始化

2.越界访问:

int arr[5];  
int *p = arr;  
p[10] = 42; // 访问arr[10]是越界的,因为数组只有5个元素

3.空指针解引用:

int *p = nullptr;  
*p = 42; // 解引用空指针会导致程序崩溃

4.野指针

int *p = new int(42);  
delete p;  
p = nullptr; // 忘记将p置为nullptr,之后可能会误用p导致野指针问题

5.未释放内存:

int *p = new int[10];  
// ... 使用p ...  
// 忘记释放p指向的内存,导致内存泄漏

如何避免野指针和空指针

初始化指针:在使用指针之前,确保将其初始化为nullptr或有效的内存地址。

检查指针:在使用指针之前,检查它是否为nullptr或有效地址。

释放内存后重置指针:在释放指针指向的内存后,立即将指针重置为nullptr

使用智能指针:智能指针(如std::unique_ptrstd::shared_ptr)可以自动管理内存,减少野指针和内存泄漏的风险。

避免返回局部变量的地址:函数返回局部变量的地址是不安全的,因为局部变量在函数返回后可能不再存在。

总结:总的来说 空指针和野指针都属于C++的危险指针 我们要避免使用危险指针 因为他真的很危险 会造成内存泄漏 数据损坏 安全漏洞

好了 本篇文章就到这里结束了 拜拜~

 

相关文章
|
6天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
25天前
|
存储 C++
c++的指针完整教程
本文提供了一个全面的C++指针教程,包括指针的声明与初始化、访问指针指向的值、指针运算、指针与函数的关系、动态内存分配,以及不同类型指针(如一级指针、二级指针、整型指针、字符指针、数组指针、函数指针、成员指针、void指针)的介绍,还提到了不同位数机器上指针大小的差异。
24 1
|
26天前
|
存储 编译器 C语言
C++入门2——类与对象1(类的定义和this指针)
C++入门2——类与对象1(类的定义和this指针)
22 2
|
27天前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
1月前
|
存储 C++ 索引
C++函数指针详解
【10月更文挑战第3天】本文介绍了C++中的函数指针概念、定义与应用。函数指针是一种指向函数的特殊指针,其类型取决于函数的返回值与参数类型。定义函数指针需指定返回类型和参数列表,如 `int (*funcPtr)(int, int);`。通过赋值函数名给指针,即可调用该函数,支持两种调用格式:`(*funcPtr)(参数)` 和 `funcPtr(参数)`。函数指针还可作为参数传递给其他函数,增强程序灵活性。此外,也可创建函数指针数组,存储多个函数指针。
|
2月前
|
编译器 C++
【C++核心】指针和引用案例详解
这篇文章详细讲解了C++中指针和引用的概念、使用场景和操作技巧,包括指针的定义、指针与数组、指针与函数的关系,以及引用的基本使用、注意事项和作为函数参数和返回值的用法。
33 3
|
27天前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
27天前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
2月前
|
C++
C++(十八)Smart Pointer 智能指针简介
智能指针是C++中用于管理动态分配内存的一种机制,通过自动释放不再使用的内存来防止内存泄漏。`auto_ptr`是早期的一种实现,但已被`shared_ptr`和`weak_ptr`取代。这些智能指针基于RAII(Resource Acquisition Is Initialization)原则,即资源获取即初始化。RAII确保对象在其生命周期结束时自动释放资源。通过重载`*`和`->`运算符,可以方便地访问和操作智能指针所指向的对象。
|
2月前
|
C++
C++(九)this指针
`this`指针是系统在创建对象时默认生成的,用于指向当前对象,便于使用。其特性包括:指向当前对象,适用于所有成员函数但不适用于初始化列表;作为隐含参数传递,不影响对象大小;类型为`ClassName* const`,指向不可变。`this`的作用在于避免参数与成员变量重名,并支持多重串联调用。例如,在`Stu`类中,通过`this->name`和`this->age`明确区分局部变量与成员变量,同时支持链式调用如`s.growUp().growUp()`。