动态内存申请

动态内存申请

静态分配

​ 在编译的时候,按事先规定的大小进行分配,比如:int a[10]。

​ 必须事先指定空间大小。

​ 分配在栈里或全局变量区。

​ 按计划分配。

动态分配

​ 在程序运行中,根据需要大小自由分配,程序员字节分配。

​ 分配在堆里,一般使用特定函数进行分配。

​ 按需分配。

动态分配函数

#### malloc函数:

​ 开辟一片连续内存空间,需要手动初始化。

​ 语法:接收=malloc(所需开辟空间大小)。

​ 注意指针变量类型需要开票所需的数据类型保持一致。

free函数:

​ 语法:free(指针变量)

int main()
{
	char *p;
	p=(char *)malloc(sizeof(char)*10);//申请一个存10个int型的空间
	if(p==NULL)
	{
		printf("shi bai");
	}	
	memset(p,0,10);
	int i;
	for(i=0;i<10;i++)
	{
		p[i]='z';
		printf("%c\n",p[i]);
	}  
	free(p);//释放空间,不释放回内存泄漏 
	p = NULL; //防止称为野指针 
	return 0; 
} 
calloc函数:

​ 开辟一片连续的内存空间,自动初始化

​ 语法:指针=calloc (元素个数,元素所占字节)

int main()
{
	int *p;
	p=(int*)calloc(20,sizeof(int));
	if(p==NULL)
	{
		printf("shibai");
	}
	int i;
	for(i=0;i<20;i++)
	{
		p[i]=i;
		printf("%d\n",p[i]);
	}
	free(p);
	p = NULL;
	return 0;
 } 
recalloc函数:

​ 重新分配内存空间大小。

​ 语法:指针=recalloc(已分配内存指针变量,重新分配空间大小的字节数)

int main()
{
	int *p;
	p=(int*)calloc(20,sizeof(int));
	if(p==NULL)
	{
		printf("shibai");
	}
	int i;
	for(i=0;i<20;i++)
	{
		p[i]=i;
		printf("%d\n",p[i]);
	}
	p = realloc(p,sizeof(int)*25);
	for(i=0;i<25;i++)
	{
		printf("%d\n",p[i]);
	}
	free(p);
	p = NULL;
	return 0;
 } 

内存泄漏

​ 申请的内存,首地址丢失,找不到,没办法释放。

易错

a+1=>//a是一维数组,加一个元素

a+1=>//a是二维数组,加一行

&a+1=>a是二维数组,加整个组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值