黑马程序员技术交流社区

标题: 内存泄露及内存管理 [打印本页]

作者: 408205555    时间: 2015-7-23 18:18
标题: 内存泄露及内存管理
一、内存管理的概念和内存分区
栈:局部变量
堆:程序运营过程中动态申请的空间
BSS段:没有初始化的全局变量和静态变量
数据段:字符串常量和已经初始化的全局变量和静态变量
代码段:程序运行的代码

二、常见的内存分配函数
C语言中提供了三个动态分配内存的函数:malloc,calloc,realloc
(1)malloc --> <stdlib.h>
格式:void * malloc(unsigend size);               
从内存的堆区分配大小为SIZE个字节的连续的内存空间
如果内存分配成功:返回新空间的首地址
如果内存分配失败:返回NULL
注意:malloc申请的内存空间,如果我们不赋值,是垃圾数

使用一个函数给malloc申请的空间进行初始化
meset(地址,’’,字节数);        //随便赋值就行
(2)calloc
格式:calloc(快数,长度); 分配多少块长度为多少的内存空间
//分配了4块,每块内存长度为4的内存空间
int *p=(int *)calloc(4,sizeof(int));
注意:calloc他可以自动初始化为0
(3)realloc
格式:int *p=realloc(地址,所需空间大小);
可以给已经存在的空间扩充大小。
如果原空间下面已被占用,会重新开辟一个符合所定义大小的空间,并把原来的空间已经存在的数据copy过来。
它会返回一个值,值是新开辟空间的地址。
三、野指针和内存泄露
//导入头文件<stdlib.h>
//使用free()函数释放内存空间
//free(要释放的空间的首地址)
free(p);
//free(p)以后,p是一个野指针
//赋值NULL把野指针锁起来
p=NULL;




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2