C/C++ -- 内存泄露和野指针
来源:互联网 发布:软件下载官方网站排行 编辑:程序博客网 时间:2024/06/05 02:34
用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。
注意:内存泄漏是指堆内存的泄漏。
简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。
野指针
“野指针”不是NULL指针,是未初始化或未清零的指针,他指向的内存地址不是程序员想要的。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:
一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。
二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。例:
free()释放的是指针指向的内存!注意!释放的是内存,不是指针!这点非常非常重要!指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!
在使用指针的时候还要注意的问题:
1:不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放.
2: 在使用指针进行内存操作前记得要先给指针分配一个动态内存。
- c/c++:内存泄露和野指针
- C/C++ -- 内存泄露和野指针
- c/c++:内存泄露和野指针的概念
- c/c++:内存泄露和野指针的概念
- c/c++:内存泄露和野指针的概念
- c/c++:内存泄露和野指针的概念
- c/c++:内存泄露和野指针的概念
- C语言中的指针和内存泄露
- C/C++内存泄露和野指针的概念
- C存储空间管理--野指针,内存泄露
- c++指针与内存泄露
- c++指针与内存泄露
- 野指针和内存泄露
- ******************** 野指针和内存泄露 ********************
- 野指针和内存泄露
- C语言为指针动态分配内存 内存泄露
- Objective-C 【单个对象内存管理(野指针&内存泄露)】
- C语言中容易导致指针和内存泄露的几种出错
- Arrays.asList方法
- 『 Spark 』6. 深入研究 spark 运行原理之 job, stage, task
- 关于go的第三方包go-sqlite3的安装
- erlang开发的开源项目
- Tomcat配置图片服务器
- C/C++ -- 内存泄露和野指针
- 棋盘问题(POJ-1321)
- poj 2195 二分图最优匹配KM算法 模板题
- Spring MVC请求处理流程
- activemq in action.pdf 英文原版 免费下载
- Java泛型基础知识整理第一部分
- response.sendRedirect的使用
- Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
- C++ STL 常用算法