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

相关推荐
低头专研1 小时前
Markdown标题序号处理工具——用 C 语言实现
c语言·开发语言·typora·markdown文件标题编号·md文件标题序号
刚入门的大一新生3 小时前
C++初阶-C++入门基础
开发语言·c++
你是理想3 小时前
wait 和notify ,notifyAll,sleep
java·开发语言·jvm
forestsea3 小时前
Python进阶编程总结
开发语言·python·notepad++
q567315233 小时前
使用Java的HttpClient实现文件下载器
java·开发语言·爬虫·scrapy
weixin_428498494 小时前
Visual Studio 中使用 Clang 作为 C/C++ 编译器时,设置优化选项方法
c语言·c++·visual studio
菜鸡中的奋斗鸡→挣扎鸡4 小时前
第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
c语言·c++·蓝桥杯
六bring个六4 小时前
QT上位机笔记
开发语言·笔记·qt
步木木4 小时前
Qt 5.14.2入门(一)写个Hello Qt!程序
开发语言·qt
techdashen4 小时前
Rust主流框架性能比拼: Actix vs Axum vs Rocket
开发语言·后端·rust