c/c++:内存泄露和野指针

来源:互联网 发布:画眉鸟欧阳修知的意思 编辑:程序博客网 时间:2024/06/05 22:35
内存泄漏
 用动态存储分配函数(new或malloc)( 需要进行内存是否申请成功的判断动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。
它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃

野指针

  “野指针”不是NULL指针,是未初始化或未清零的指针,他指向的内存地址不是程序员想要的。

野指针的成因主要有两种:

  一、指针变量没有被初始化任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。

  二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。别看free和delete的名字恶狠狠的(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NULL)进行防错处理。很遗憾,此时if语句起不到防错作用,因为即便p不是NULL指针,它也不指向合法的内存块。

指针是一个变量,只有程序结束时才被销毁。释放了内存空间后,原来指向这块空间的指针还是存在!只不过现在指针指向的内容的垃圾,是未定义的,所以说是垃圾。因此,前面我已经说过了,释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了。非常重要啊这一点!

http://blog.csdn.net/dangercheng/article/details/12618161
0 0
原创粉丝点击