C语言 内存动态管理函数
来源:互联网 发布:js身份证号正则表达式 编辑:程序博客网 时间:2024/06/05 05:58
C语言库函数中提供了程序动态申请和释放内存存储空间的库函数。常用的主要包括(1)malloc 函数,(2)calloc 函数,(3)free 函数 ,(4)realloc 函数。
Ⅰ )malloc 函数
malloc 函数是使用比较多的申请内存空间的函数,它的作用主要是以字节为单位在内存中开辟指定大小的存储空间。malloc 函数的函数原型为:
void* malloc(unsignedint size)
它的形参size 为无符号整型。函数的值为指向void 类型的指针,函数返回值为系统分配给此段空间的起始地址。如果想将这个指针指赋给其他类型的指针变量,应当进行显式的类型转换(强制类型转换),例如:
malloc(4*sizeof(int));
用来开辟一个长度为4个整形变量所占空间(16个字节)大小的内存空间。如果想把此地址分配给一个指向long 型的指针变量p,则应进行以下显示转换:
p =(long*)malloc(4 *sizeof(int));
指向void 类型是标准ACSI C(ANSI C是由美国国家标准协会(ANSI)及国际标准化组织(ISO)推出的关于C语言的标准。)建议的,现在有的C系统提供的malloc 函数的返回的指针是指向char 型的,其函数原型为:
char* malloc(unsigned int size)
在使用指向char 型的函数返回指针,并将它赋给其他类型的指针变量时,也应进行类似的强制类型转换。如果内存缺乏足够大的空间进行分配,则malloc 函数值为“空指针”,即地址为0。
Ⅱ)calloc 函数
void* calloc(unsigned int num, unsigned int size)它的两个形参是num 和 size。其作用是分配num 个大小为 size 字节的空间。例如:
calloc(20, 30);
Ⅲ)free 函数
void free(void* ptr)
其作用是将指针变量ptr 指向的存储空间释放,即交还给系统,系统可以另行分配做它用。应当强调,ptr 值不能是任意的地址项,而只能是由在程序中执行过的 malloc 或 calloc 函数所返回的地址。如果随便写:free(100)是不可以的。下面这样用是可以的:
p =(long*)malloc(18); ... free(p);
free 函数把原先开辟的18个字节的空间释放,虽然p 是指向 long 型的,但可以传给指向指向void 型的指针变量ptr ,系统会使其自动转换。free 函数无返回值。
下面是一个malloc() 和 free() 两个函数配合使用的简单实例。
#include<stdio.h>#include<stdlib.h> int main(void){ int* p, t; p = (int*)malloc(40 * sizeof(int)); //用sizeof(int) 计算int型数据的字节数 if (!p) { printf("\t内存已用完!\t"); exit(0); } for (t = 0; t < 40; t++) { *(p + t) = t; //将整数t 赋给指针变量p+t 指向的内存 } for (t = 0; t < 40; t++) { printf("%d\t", *(p + t)); } printf("\n"); free(p); //利用free函数释放指针变量p开辟的内存空间 return 0;} 程序执行会依次输出0~39共40个整数。
Ⅳ)relloc 函数
该函数用来使已分配的空间改变大小,即重新分配。其原型为:
void* realloc(void* ptr,unsigned int size)其作用是将ptr指向的存储区(原先用malloc 函数分配的)大小改为size个字节。可以使原先的分配区扩大或缩小。它的函数返回值是一个指针,即新的存储区的首地址。新的首地址不一定与原来的首地址相同,因为改变了空间,存储区会进行必要的移动。
使用内存管理函数一般需要包含头文件:
#include<stdlib.h>
#include<malloc.h>
两个包含其中一个即可。
- C语言 内存动态管理函数
- C语言动态内存管理
- C语言动态内存管理
- C语言动态内存管理
- C语言动态内存管理
- C语言内存管理函数
- C语言内存管理函数
- C语言内存管理函数
- C语言内存管理函数
- C语言内存管理(初级)----动态数组
- c语言中的动态内存管理
- c语言中的内存管理(重点:动态内存申请释放,野指针,指针函数)
- C语言动态内存分配函数解析
- C语言动态内存分配函数解析
- C语言中的动态内存分配函数
- C语言动态内存分配函数解析
- C语言的动态内存分配函数
- C语言中的动态内存分配函数
- SQL笔记(三)
- px4源码学习五--固定翼位置控制模块
- 基于Unity3D的打开Windows软键盘的功能的实现
- Android自带计时器类CountDownTimer
- maven 连接sqlserver
- C语言 内存动态管理函数
- jquery-confirm插件使用
- xmpp介绍
- Request获取请求数据
- MySql导入导出
- HDU 4815 Little Tiger vs. Deep Monkey(母函数)
- 把之前安装的jdk1.7换成1.6之后在dos命令Java -version 死活1.7问题解决
- 发送邮件
- SQL SERVER和Oracle中in查询在实际中的应用