C语言 calloc, malloc, realloc ,alloca以及 free的用法

本文深入解析C语言中动态内存管理的关键函数,包括malloc、calloc、realloc与free的使用场景与注意事项。通过具体代码示例,详细解释如何正确地分配、使用和释放内存资源,确保程序的稳定性和效率。

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

C 语言中,free可以释放colloc, malloc, realloc 动态分配的空间。首先,free释放的不是定义的指针,而是定义的指针指向的空间
对于定义的普通指针,如果定义的指针指向动态分配的地址空间,则可以使用free释放指针指向的这段空间;否者,就不能使用free释放指针指向的空间。
例子:

1. char *p=null; 
2. p=(char*)malloc(1024);
3. if(p!=NULL) free(p); 

这段代码是对的;

1.char *p=NULL;
2.char buf[1024];
3.p=(char*)buf;
4.free(p);

这个是错误的。
它们用法:
1. realloc()

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

功能:更改以前分配的内存长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定。改变ptr指针指向内存区域大小为newsize。

  1. malloc()
void* malloc(num * sizeof(dataType));

功能:申请指定字节数的内存。申请到的内存中的初始值不确定。产生一个指向大小为num * sizeof(dataType)的内存空间的指针。

  1. calloc
    为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存的每一位(bit)都初始化为0

  2. alloca
    在栈上申请内存。

用法和注意
1. malloc
分配指定字节数的存储区。此存储区中的初始值不确定
2. calloc
为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0
3. realloc
更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定
4. alloca
因为在栈上申请的内存,所以程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca不具可移植性, 而且在没有传统堆栈的机器上很难实现。alloca不宜使用在必须广泛移植的程序中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值