内存泄漏

 用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元,不能被任何程序再次使用,直到程序结束。即所谓内存泄漏。

注意:内存泄漏是指堆内存的泄漏。

 简单的说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。

野指针

  “野指针”不是NULL指针,是未初始化或未清零的指针,他指向的内存地址不是程序员想要的。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。野指针的成因主要有两种:

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

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

[cpp] view plaincopy
  1. 1   #include<stdio.h>
  2. 2   #include<stdlib.h>
  3. 3
  4. 4  int main()
  5. 5  {
  6. 6     char *p=(char *)malloc(sizeof(char)*100);
  7. 7    strcpy(p, “hello”);
  8. 8    printf(“%s ”,p);
  9. 9  free(p); // p 所指的内存被释放,但是p所指的地址仍然不变
  10. 10  if(p != NULL) // 没有起到防错作用
  11. 11     strcpy(p, “world”); // 出错
  12. 12     printf(“%s \n”,p);
  13. 13 }

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

  在使用指针的时候还要注意的问题:

  1:不要返回指向栈内存的指针或引用,因为栈内存在函数结束时会被释放.

2:  在使用指针进行内存操作前记得要先给指针分配一个动态内存。

C语言中野指针与内存泄漏相关推荐

  1. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

  2. c语言野指针应用,C语言中野指针的深入解析

    C语言中野指针的深入解析 C语言中野指针这一块是C语言的难点,下面小编为大家带来了C语言中野指针的深入解析,欢迎大家阅读! "野指针"的成因主要有两种: (1)指针变量没有被初始化 ...

  3. 野指针与内存泄漏那些事

    野指针:不是NULL指针,是指向垃圾内存的指针 野指针成因: 1.指针变量没有被初始化:指针变量在创建时同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存. 2.指针p被free或者d ...

  4. 【C++ 语言】智能指针 引入 ( 内存泄漏 | 智能指针简介 | 简单示例 )

    文章目录 I . 智能指针 引入 II . 智能指针 简介 III . 智能指针 简单示例 I . 智能指针 引入 1 . 示例前提 : 定义一个 Student 类 , 之后将该类对象作为智能指针指 ...

  5. 基于C语言中野指针的深入解析

    "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用NULL指针,因为用if语句很容易判断.但是"野指针"是很危险的,if ...

  6. 转载:基于C语言中野指针的深入解析

    *原文链接:http://www.jb51.net/article/39692.htm "野指针"不是NULL指针,是指向"垃圾"内存的指针.人们一般不会错用N ...

  7. C语言中野指针、NULL、0与‘\0’的区别与用途

    野指针:未初始化或初始化的指针. int*p;printf("%d",*p); NULL:代表空指针,也就是指向一个不被使用的地址. 0 :0用于数值,但在大多数系统中,都将0作为 ...

  8. C++中野指针问题分析总结

    其实项目一直被野指针困扰,一直在讨论,居然没有什么下文,下文正式由我接受这个问题. 场景是这样:指针间互相引用,一个被删除的时候,另外一个不知道,它再使用的时候就会异常,因为此时指针已经为空了. 我今 ...

  9. c语言中数组的概念及作用,详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

最新文章

  1. [POJ1741]Tree
  2. nginx 配置并发数限制
  3. 2017-10-17 开源非英文关键词编程语言
  4. sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)
  5. XMLhttp学习应用
  6. C#中await/async闲说
  7. linux脚本多线程,Shell多线程操作及线程数控制实例
  8. 关于视频光端机调制方式及介质特点的介绍
  9. mate10是否支持html,NFC功能是什么 华为Mate 10支持NFC功能吗【详解】
  10. XX省大型门户网站运维服务项目方案
  11. 单例模式-序列号生成器
  12. Kali安装使用文泉驿字体
  13. 家庭网络布线工程图布线方案
  14. 苹果8p录像鸿蒙,录屏怎么录苹果8p | 手游网游页游攻略大全
  15. Clouda 之我见
  16. linux服务器系统时间和bios时间,Linux系统时间, 硬件BIOS时间的校准与同步
  17. 神经网络模型(.pth)能做些什么(使用心得)
  18. MacOS使用conan
  19. 怎样才能设计一个“易用性”好的网站?
  20. Eclipse Che安装入门和使用(一)

热门文章

  1. 高仿微信上传头像附带压缩,旋转图片,附加demo
  2. linux系统编程之管道(二):管道读写规则和Pipe Capacity、PIPE_BUF
  3. Java8 - Streams map()
  4. 寻找ada语言爱好者
  5. 视频会议系统哪家比较好?
  6. 螺杆启闭机的安装和调试
  7. SIP client - SIP Peers
  8. python如何输出字符串_python-------打印与字符串格式化
  9. python 计算图像结构张量(Structure_tensor)
  10. 手术室无菌注意事项的内容