动态内存管理函数

C语言通过库函数实现动态内存管理,使用动态内存管理函数时需要使用预编译指令#include包含头文件stdlib.h。

动态内存分配函数malloc

声明格式:
void *malloc(size);
void * 表明函数malloc的返回值时void * 类型的
size表明该函数向内存申请size个字节的连续存储空间
如:

int *p; //声明一个指针变量p
p = (int*)malloc(sizeof(int));
//malloc(sizeof(int)) 向内存申请4B的空间
//(int*)将函数malloc的返回值void*类型转化int*类型
//当函数malloc申请空间失败时(如空闲内存不足4B),函数malloc的返回值为NULL,宏NULL的值为0
//当成功时,函数会返回该内存空间的首地址

连续内存动态分配函数calloc

声明格式:
void *calloc(n,size);
void * 表明函数calloc的返回值时void * 类型的
n,size表明该函数向内存申请n个size个字节的连续存储空间
如:
注:与malloc不同的地方在于分配的内存初始化为0

#include<stdio.h>
#include<stdlib.h>

int main()
{
	char *p;
	p = (char*)calloc(10, sizeof(char));
	if (p == NULL)
	{
		printf("内存分配失败!");
		exit(1);  //程序异常退出
	}
}

内存分配调整函数realloc

realloc用于变更已分配内存空间的大小。
①内存空间变大:新增的空间的内容清零
②内存空间变小:被缩小的那部分空间的数据丢失,其余不变

声明格式:
void * realloc(p,size);
void * 表明函数realloc的返回值时void * 类型的
p 是需要变更空间的首地址
size 是变更后内存内存空间的大小
如:

#include<stdio.h>
#include<stdlib.h>

int main()
{
	char *p;
	p = (char*)realloc(10, sizeof(char));
	if (p == NULL)
	{
		printf("内存分配失败!");
		exit(1);  //程序异常退出
	}
	p = (char*)realloc(p, 20);  //把原有的空间扩大到20B
	if (p == NULL)
	{
		printf("内存分配失败!");
		exit(1);  //程序异常退出
	}
}

动态内存释放函数free

声明格式:
void free( p );

用于释放动态内存分配函数所分配的空间
void 表明函数无返回值
p 是所要释放内存的首地址。

如果p==NULL,那么函数free什么也不做

char *p;
	p = (char*)realloc(10, sizeof(char));
	if (p == NULL)
	{
		printf("内存分配失败!");
		exit(1);  //程序异常退出
	}
	........  //使用p
	free(p);   //使用完p了,释放p
	*p = 'A';   //已经p把内存释放了,不能再使用p
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值