C和指针详解------动态内存分配

本文介绍了C语言中的动态内存管理函数,包括malloc、free、calloc和realloc的功能及使用方法,并讨论了常见的动态内存错误。

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

malloc和free

malloc和free分别用于执行动态内存分配和释放。这些函数维护一个可用内存池。当一个程序另外需要一些内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。当一块以前的内存不再使用时,程序调用free函数把它归还给内存池供以后之需。
两个函数原型声明如下

void *malloc(size_t size);
void free(void *pointer);

malloc所分配的是一块连续的内存。

如果操作系统无法向malloc提供更多的内存,malloc就返回一个NULL指针。

向free传递一个NULL参数不会产生任何效果

malloc是如何知道你所请求的内存需要存储的是整数、浮点数、结构还是数组呢?它并不知道。所以malloc返回一个类型为void *的指针,供你强制转换。

calloc 和 realloc
void *calloc(size_t num_elemnets, size_t element_size);
void realloc(void *ptr, size_t new_size);

calloc也用于分配内存。malloc和calloc之间的主要区别是后者在返回指向内存的指针之前把它初始化为0。

realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,你可以使一块内存扩大或缩小。

常见的动态内存错误

在使用动态内存分配的程序中,尝尝会出现许多错误。这些错误包括对NULL指针进行解引用操作、对分配的内存进行操作时越过边界、释放并非动态分配的内存、试图释放一块动态分配的内存的一部分以及一块动态内存被释放之后被继续使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值