C/C++中在子函数中使用malloc分配内存和free释放内存的方法

本文详细介绍了C/C++中在子函数内如何使用malloc分配内存和free释放内存,强调了内存管理的重要性,特别是避免野指针的产生。通过示例代码展示了常见错误和正确做法,提醒程序员在释放内存后应将指针置为NULL。

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

1. malloc函数

// 定义于头文件<stdlib.h>中
void* maalloc (size_t size);
/* 返回值
成功时,返回指向新分配内存的指针。为避免内存泄漏,必须用 free() 或 realloc() 解分配返回的指针。
失败时,返回空指针。
*/

分配size字节的未初始化内存。
若分配成功,则返回任何拥有基础对齐的对象类型对齐的指针。
若 size 为零,则 malloc 的行为是实现定义的。例如可返回空指针。亦可返回非空指针;但不应当解引用这种指针,而且应将它传递给 free 以避免内存泄漏。

malloc 是线程安全的:它表现得如同只访问通过其参数可见的内存区域,而非任何静态存储。

令 free 或 realloc 归还一块内存区域的先前调用,同步于令 malloc 分配相同或部分相同的内存区域的调用。此同步出现于任何通过解分配函数所作的内存访问后,和任何 malloc 所作的内存访问前。所有操作每块特定内存区域的分配和解分配函数有单独全序。(C11起)

示例:

#include <stdio.h>   
#include <stdlib.h> 
 
int main(void) 
{
   
    int *p1 = malloc(4*sizeof(int));  // 足以分配 4 个 int 的数组
    int *p2 = malloc(sizeof(int[4])); // 等价,直接命名数组类型
    int *p3 = malloc(4*sizeof *p3);   // 等价,免去重复类型名
 
    if(p1) {
   
        for(int n=0; n<4; ++n) // 置入数组
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // 打印出来
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值