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

相关推荐
05664629 分钟前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄34 分钟前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#
吾儿良辰41 分钟前
一个被BCL遗忘的高性能集合:C# CircularBuffer<T>深度解析
开发语言·windows·c#
昆曲之源_娄江河畔43 分钟前
Python如何安装flask, pymssql
开发语言·python·flask·pymssql
Leighteen1 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
0566461 小时前
Python康复训练——控制流与函数
开发语言·python·学习
峥无1 小时前
C++11 深度详解:现代 C++ 基石全梳理
开发语言·c++·笔记
阿米亚波1 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
小王C语言2 小时前
【3. 基于 Vibe Coding 的 OJ 平台】. 构建仓库、环境准备、需求梳理、安装依赖
网络·c++
SomeB1oody2 小时前
【RustyML入门】1.0. 快速上手
开发语言·后端·机器学习·rust·教程