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

相关推荐
「、皓子~29 分钟前
AI创作系列(2):UniApp跨端开发实战 - 海狸IM移动端完全由AI编写
开发语言·人工智能·uni-app·开源·vue·开源软件·ai编程
南無忘码至尊42 分钟前
Unity C# 入门基础知识点整理与实战技巧
开发语言·c#
江梦寻43 分钟前
软件工程教学评价
开发语言·后端·macos·架构·github·软件工程
iCxhust44 分钟前
汇编字符串比较函数
c语言·开发语言·汇编·单片机·嵌入式硬件
XMYX-02 小时前
Python 实现一个带进度条的 URL 批量下载工具(含 GUI 界面)
开发语言·python
lul~2 小时前
[科研理论]无人机底层控制算法PID、LQR、MPC解析
c++·人工智能·无人机
一只小小汤圆2 小时前
如何xml序列化 和反序列化类中包含的类
xml·开发语言·c#
南枝异客2 小时前
电话号码的字母组合
开发语言·javascript·算法
未来并未来2 小时前
Sentinel 流量控制安装与使用
开发语言·python·sentinel
Halo_tjn3 小时前
Java IO
java·开发语言