动态内存管理

常用的内存开辟:

常用的int、long、char类型与输出开辟的空间,开辟出来的来空间大小是固定的。

int a;//在栈空间开辟的空间为四个字节
char a;//在栈空间开辟的空间为一个字节
short a;//在栈空间开辟的空间为两个字节
long a;//在栈空间开辟的空间为八个字节
int arr[10]={0};//在栈空间上开辟40个字节连续的空间

动态内存开辟函数:

malloc函数:void* malloc(size_t size);

malloc函数基本作用为向内存申请连续可用的空间,并返回指向这亏空间的指针。

如果开辟成功,贼返回一个指向开辟好空间的指针。

如果开辟失败,则返回一个空指针,所以在使用malloc函数一般使用if函数判断函数返回值。

int *p=(int *)malloc(40);//开辟为10个整型的空间
//因为返回类型为void*,所以具体类型要自己设定
if(p==NULL)
{
    printf("%s\n",strerror(errno));
    return 0;
}

free函数:void free(void *ptr);

free函数的作用是用来释放动态开辟的内存空间。

calloc函数:void *calloc(site_t num,size_t size);

calloc函数功能是为num个大小为size的元素开辟一块空间,并且把空间的每个字节初始化为0。

int *p=(int *)calloc(10,sizeof(int));//开辟10个整形大小的空间
int *p=(int *)malcoc(40);//开辟10个整形大小的空间

malloc函数与calloc函数同样是开辟了40个字节的空间,但是两个函数的区别在于calloc开辟的空间会把每个自己字节初始化为0。

所以如果对开辟的空间初始值有要求,一般使用malloc函数,自己定义空间初始值,没有过多要求的可以使用calloc函数来开辟空间。

realloc函数:void* realloc(void * ptr,size_t size);

realloc函数作用是对内存大小进行调整。

而realloc在增容调整时可能会出现两种情况:

1.原有空间之后又足够大的空间进行增容。

2.原有空间之后没有足够大的空间进行增容。

 出现情况1时,增容不会导致原来空间数据的变化,而情况2,增容情况时在堆空间上另找一个足够大的连续空间来使用,所以函数返回值为一个新的内存空间。

当出现情况2时,如果直接把增容空间赋给原有空间,当增容失败返回NULL指针,会丧失原有数据,所以在使用realloc函数是要验证增容空间是否为空指针,在进行赋值。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值