C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)
1、野指针的概念、成因以及避免
首先,来说说什么是野指针,所谓野指针就是一个指向未申请访问受限的内存区域或者已经删除了的对象的指针。
什么意思呢?就是本来一个指针指向一个对象、一块内存,但是由于程序(函数)运行结束对象(栈内存)被释放,从而
导致指针指向一个“垃圾”内存,注意,不能将NULL指针认为是野指针。因为野指针指向的是随机的一块内存地址。
成因:1)指针在声明时没有进行初始化;2)在释放指针所指的内存时,没有将指针置为NULL;3)返回值是栈内存的指针或者引用。
避免:很多网上的资料都说初始化指针为NULL,是一个良好的编程习惯,实际上这也是为了避免野指针的出现。当然如果你的指针是
static指针变量,那么它的初始值是不会随机的。
2、内存泄露
什么是内存泄露呢?所谓内存泄露,就是指动态分配的内存未释放或者无法释放,但是原本指向
这块内存的指针却失去了对这块内存的控制,导致内存的浪费。
成因:1)在使用完内存空间没有将其释放;2)非法访问内存空间,也就是说访问分配的内存中未进行初始化的变量;
避免:额,这个我也不知道具体怎么避免,网上有很多避免内存泄露的方法,这里就不做阐述了。(以后再补充)不过最近在使用集合类的时候出现过内存泄露,
当将其设为静态时,其生命周期与整个程序的生命周期是一样长的,因此容易出现内存泄露。
3、智能指针
智能指针使用引用计数的计数,也就是说智能指针类使用一个引用计数和类的一个对象关联,由引用计数去跟踪类的多个对象的指针,从而知道有多少个对象的指针指向同一个对象。
它其实是存储指向动态分配对象指针的类。
对于这个智能指针,我还没有进行深入的了解,只是知道在使用一些容易导致内存泄露、出现野指针的情况下,例如最近在写一个语音识别的项目时,使用COM接口指针时,可以使用智能指针。(日后进行深入时再补充)
若要释放一个智能指针,直接给它赋值为NULL即可。
C++11标准的智能指针、野指针、内存泄露的理解(日后还会补充,先浅谈自己的理解)的更多相关文章
- C++三种野指针及应对/内存泄露
C++三种野指针及应对/内存泄露 野指针,也就是指向不可用内存区域的指针.如果对野指针进行操作,将会使程序发生不可预知的错误,甚至可能直接引起崩溃. 野指针不是NULL指针,是指 ...
- [Swift通天遁地]七、数据与安全-(11)如何检测应用程序中的内存泄露
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- C++的空指针、野指针和指针赋值NULL.md
1.空指针和野指针 http://blog.csdn.net/fu_zk/article/details/21030607 空指针常量 一个表示0值的整数常量,叫做空指针常量.例如:0.0L.1-1( ...
- NULL指针、零指针、野指针
1.1.空指针 如果 p 是一个指针变量,则 p = 0; p = 0L; p = '\0'; p = 3 - 3; p = 0 * 17;p=(void*)0; 中的任何一种赋值操作之后, p 都成 ...
- 野指针、NULL指针和void*
一.野指针 “野指针”不是NULL指针,是指向“垃圾”内存的指针. “野指针”的成因主要有三种: (1)指针变量没有被初始化.任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱 ...
- 浅谈 “空指针、野指针、void*”
Author: JW. Zhou Date: 2014/7/2 一.空指针(0/NULL) 返回NULL和返回0是完全等价的,因为NULL和0都表示空指针,换句话说:空指针是什么,就是 ...
- 浅谈C++的智能指针
我们使用智能指针来自动运行管理内存,避免对原始指针的使用不当而造成内存泄漏. ------------------------------------------------------------- ...
- 李洪强iOS开发之【Objective-C】09-空指针和野指针
一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针 ...
- 【Objective-C】4-空指针和野指针
一.什么是空指针和野指针 1.空指针 1> 没有存储任何内存地址的指针就称为空指针(NULL指针) 2> 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0. 下面两个都是空指针 ...
随机推荐
- Wireshark 捕捉本地数据 --WinPcap切换NPcap
Wireshark默认匹配安装的是WinPcap,但是WinPcap有个缺点,不能抓取本地回环数据 NPcap是在WinPcap的基础上进行优化开发的,可以抓取本地数据 如果已安装WinPcap的请卸 ...
- WinForm画网格并填充颜色
因为研究CodeCombat上的最后一题,自己尝试分解题目,然后想到需要画网格,还有最优化的方法 源代码如下 using System; using System.Collections.Generi ...
- Leetcode[1]Two Sum C++
最简单的思想,遍历, 1.两层循环,自己写的,没有用STL,时间花费较长 vector<int> twoSum(vector<int>& nums, int targe ...
- annovar积累
20170222 ANNOVAR简介 ANNOVAR是由王凯编写的一个注释软件,可以对SNP和indel进行注释,也可以进行变异的过滤筛选. ANNOVAR能够利用最新的数据来分析各种基因组中的遗传变 ...
- C++:delete不完整类型的指针
简单版 以下代码编译时会有warning: class X; void foo(X* x) { delete x; } 在GCC4.1.2下,编译出错信息是: warning: possible pr ...
- ros python 订阅robot_pose
#!/usr/bin/env python import rospy import tf import time from tf.transformations import * from std_m ...
- js获取url 参数
window.getRequest = function (url) { var theRequest = new Object(); var indexOf = url.indexOf(" ...
- 《剑指offer》第四十题(最小的k个数)
// 面试题40:最小的k个数 // 题目:输入n个整数,找出其中最小的k个数.例如输入4.5.1.6.2.7.3.8 // 这8个数字,则最小的4个数字是1.2.3.4. #include < ...
- 丑数问题 Ugly Number
2018-07-28 15:30:21 一.判断是否为丑数 问题描述: 问题求解: 所谓丑数,首先得是正数,然后其质数因子只包含了2,3,4,因此我们只需要对当前的数分别除2,3,4直到不能除为止. ...
- Asp.Net MVC中Action跳转
首先action的跳转大致归类: 1跳转到与当前同一控制器内的action和不同控制器内的action. 2带有参数的action跳转和不带参数的action跳转. 3跳转到指定视图,不经过Contr ...