【C】简单动态内存开辟(1)!!

malloc函数

在c语言标准库里面提供了函数malloc,这个函数是想内存池里面申请内存(字节为单位)。当一个程序另外需要一些内存的时候就可以调用malloc函数来获取一块适合的内存,当用户调用成功时,函数会返回一个内存的地址。注意:这里申请成功的内存并没有初始化,里面存的是一些随机值,因此当申请成功一块内存的时候初始化非常有必要。


#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	int *p = malloc(10*sizeof(int));      //malloc函数向内存里面申请10个int型的内存(40字节)
	int i = 0;
	for (i=0;i<10;i++)
	{
		*(p+i) = i;
	}
	for (i=0;i<10;i++)
	{
		printf("%d ",*(p+i));
	}
	free(p);                                 //free函数将申请好的 内存释放
	memset(p,0,10*sizeof(int));              //memset函数将释放掉的内存进行初始化为0
	return 0;
}

注:malloc函数一定要和free函数成对使用,否则将会造成内存泄露

free函数

这个函数是释放掉用malloc函数申请的内存,free函数的参数要么是NULL,要么是用malloc函数申请成功的一块内存的地址,当调用完free函数时,申请成功的内存会还给操作系统,但是这块内存的数据并没有销毁,这是就编写程序时候就要在free函数后面对这块内存里面的数据进行销毁(一般初始化成0)。这样就进一步提高了了代码的安全性。

calloc函数

calloc函数功能和malloc函数相似,但是调用calloc函数申请的内存是经过初始化的,calloc函数将申请的内存初始化成0.他们的而不同点在于calloc函数的参数包括所需元素的个数和每个元素的字节数,根据这些参数,函数可以知道开辟多大的内存。

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
	int *p = calloc(10,sizeof(int ));//利用calloc函数申请40个字节的内存空间
	//int *p = malloc(10*sizeof(int));
	int i = 0;
	for (i=0;i<10;i++)
	{
		*(p+i) = i;
	}
	for (i=0;i<10;i++)
	{
		printf("%d ",*(p+i));
	}
	free(p);
	memset(p,0,10*sizeof(int));
	return 0;
}


 realloc函数

realloc函数适用于修改一块原来已经分配好的内存,使用这个函数可以将这块内存扩大或者缩小,在扩大的时候,realloc函数是另外开辟一快内存,同时将原来内存里面的数据进行复制到新开辟的内存里面,达到扩大内存的母的,这时值得注意的是,后面的指针就不可以指向原来开辟的那快内存的地址。在缩小内存时候,同样是另外开辟一块内存,但是在复制的时候,在多余的那块内存里面的数据就会被拿掉,其余的数据保留。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值