21天学通C++第八章——指针

C++虽然可以动态的管理内存,但是并不能像其他高级语言如JAVA、C#有自动垃圾收集器去对应用程序的内存进行清理。

常见指针错误

内存泄漏

解释:

在使用完new申请内存之后,没有配套的delete,则之后会产生内存泄漏。

即如何理解,当ptr指向new1,使用完成以后未使用delete对new1所占用的空间释放,然后又将ptr=new2,则会产生内存泄漏,即new1未被释放的同时也没有指针指向,即产生内存泄漏。

伪代码:

cpp 复制代码
int* ptr = new int[5];

//forget delete

ptr = new int[10];//产生内存泄漏

危害:

占用内存越多,系统运行越慢,内存泄漏会占用宝贵的内存资源。

指针指向无效的内存单元

解释:

ptr中必须存放的是有效的内存地址,即*ptr为有效的数值

伪代码:

cpp 复制代码
char* ptr;

if(tmp=='Y')
{
    ptr=new char;
    *ptr = true;
}

//出错情况一,若tmp!=Y
std::cout<<*ptr<<std::endl;

//出错情况二
delete ptr;

危害:

即会产生系统崩溃

悬浮指针

解释:

即在delete之后ptr变得无效,则就不能再使用它了

指针编程最佳实践

应该

(1)初始化指针变量,若不初始化则可能不具有访问权限,产生冲突

(2)必须字指针有效时才能使用它

(3)new一定要与delete相配套

不应该

(1)delete之后不可再次访问

(2)不能对同一个地址进行多次delete

相关推荐
AI行业学习1 分钟前
CC-Switch 下载、安装与使用配置指南【2026.5.29】
java·开发语言·vscode·python·eclipse·laravel
许彰午4 分钟前
03_Java流程控制详解
java·开发语言·python
fpcc7 分钟前
C++编程实践——提高缓存的命中
c++·缓存
SoftLipaRZC8 分钟前
C语言内存函数完全指南:memcpy/memmove/memset/memcmp
c语言·开发语言
2201_7611990410 分钟前
python运维1
运维·开发语言·python
小张成长计划..14 分钟前
【C++】37:IO库(扩展)
c++
Cx330❀15 分钟前
【Qt 核心机制篇】深度解析 Qt 信号与槽(Signals & Slots)机制:从底层原理、实战演练到 Lambda 进阶
linux·开发语言·c++·人工智能·qt·ubuntu
学习,学习,在学习15 分钟前
Modbus TCP同步通信方式实现异步级效率
网络·c++·qt·网络协议·tcp/ip·qt5
z落落18 分钟前
C# ArrayList 动态集合(接口/区别/API/深浅拷贝)+ List<T> 泛型集合
开发语言·c#