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

相关推荐
沐晓时光10 小时前
C语言入门,内存函数知识讲解
c语言·开发语言
David猪大卫16 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
HPtiger16 小时前
C++ 入门笔记:从 C 到 C++ 的核心过渡(命名空间、输入输出、缺省参数、重载、引用、内联)
c语言·c++·学习
fengci.17 小时前
CTF2MISC中等部分
开发语言·前端·学习
xys_67819 小时前
JavaEE通关手册:初识Java
java·开发语言
努力努力再努力wz19 小时前
【Lua 进阶系列】从 C++ 对象到 Lua 变量:一文理解 userdata、Lua 栈与元表绑定机制
c++·junit·lua
慧都产品智能化19 小时前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu20 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu21 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
坤坤子吖21 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json