【C++札记】C/C++指针使用常见的坑

论坛 期权论坛 期权     
书圈   2019-6-16 21:53   3643   0

报  名
2018年计算机类课程高校教师高级研修班正式启动

2018年3月-4月共6场培训,课程包括程序设计、大数据、软件工程、数据结构、Python等,目前已经开始报名,特邀请各高校相关院系选派教学主管领导、课程负责人和骨干教师参加相关研修班。

会议详细通知下载地址(扫描二维码也可以下载)
https://www.jianguoyun.com/p/Df3pSXcQ_YCzBhjr9UI




【文章来源:码农有道】
C/C++中的指针让程序员有了更多的灵活性,但它同时也是一把双刃剑,如果用的不好,则会让你的程序出现各种各样的问题,有人说,C/C++程序员有一半的工作量是花在处理由指针引起的bug上,可想而知,指针中包含的陷阱是多么可怕。既然如此,我们在编写代码的时候就应该把好关。
要想在编写代码的时候尽可能避免指针带来的问题,就需要知道不恰当的使用指针到底会引发哪些问题, 又该如何去避免它?下面一起来总结在使用指针时容易遇到的问题。


避免内存泄露
程序在运行的时候需要内存,同时我们也知道内存是有限的,是计算机特别宝贵的资源,对于使用完的内存,应当及时的归还给操作系统。
在c/c++中,如果是栈上的内存(比如说函数中的局部非静态变量),在使用完之后,操作系统会帮我们自动回收;但是如果是通过动态分配得到的堆上的内存,需要我们手动释放。
如果我们在程序中忘了释放这些动态内存,而程序又是会持续运行的服务进程,会导致内存占用越来越高,轻者致残影响系统性能,重者致命导致进程崩溃。
总之一句话,不再用到的内存没有释放,就叫做内存泄露,内存泄露的问题很严重。好了,让我们看几个内存泄露的案例。
在C/C++中,通过动态内存分配函数(如malloc系统函数)或者new运算符分配的动态内存在使用完之后需要手动释放。否则会造成内存泄露。


建议:代码编写时注意malloc/free, new/delete成对使用


即使在malloc/new后显示调用了free/delete释放内存,但是由于异常可能会导致释放内存的free/delete语句得不到执行,也会发生内存泄露,下面的例子就是这种情况。




从运行结果来看,类的析构函数没有被执行,可推知delete语句并没有得到执行。
有人会说,这还不简单,直接在catch语句的cout
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:110
帖子:22
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP