malloc、calloc、realloc、free

本文详细介绍了C语言中用于内存管理的关键函数:malloc、calloc、realloc和free的使用方法及注意事项。通过具体示例展示了如何分配、初始化和重新分配内存,以及如何正确释放不再使用的内存以避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void * malloc(size_t size);

分配内存块

分配一块大小为字节的内存块,返回一个指向块开始的指针。

新分配的内存块的内容未被初始化,并保留不确定的值。

如果大小为零,则返回值取决于特定的库实现(它可能是或不可能是空指针),但返回的指针不应被解除引用。

 

void free(void * ptr);

取消分配内存块

先前由呼叫分配的一块内存的malloc,释放calloc 要么的realloc被释放,使其可用于进一步分配。

如果ptr没有指向使用上述函数分配的内存块,则会导致未定义的行为。

如果ptr是一个空指针,该函数什么也不做。

注意这个函数不会改变ptr本身的值,因此它仍然指向相同(现在无效)的位置。


void * calloc(size_t num,size_t size);

分配并初始化数组

为num元素数组分配一块内存,每个元素的大小都是字节长,并将其所有位初始化为零。

有效的结果是分配一个零初始化的(num*size)字节内存块。

如果大小为零,则返回值取决于特定的库实现(它可能是或不可能是空指针),但返回的指针不应被解除引用。


void * realloc(void * ptr,size_t size);

重新分配内存块

更改由ptr指向的内存块的大小。

该函数可能会将内存块移到新位置(其地址由函数返回)。

即使将块移动到新位置,内存块的内容也会保留为新旧尺寸中较小的一个。如果新尺寸较大,则新分配的部分的值不确定。

如果ptr是一个空指针,该函数的行为就像的malloc,分配一个大小为字节的新块并返回一个指向其开始的指针。


#include <stdlib.h>     

int main ()
{
  int * buffer1, * buffer2, * buffer3;
  buffer1 = (int*) malloc (100*sizeof(int));
  buffer2 = (int*) calloc (100,sizeof(int));
  buffer3 = (int*) realloc (buffer2,500*sizeof(int));
  free (buffer1);
  free (buffer3);
  return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值