动态内存的申请和释放

本文介绍了C语言中动态内存管理的基础知识,包括malloc()和free()函数的基本概念、用法及注意事项。讲解了malloc()如何从堆中分配内存,以及free()释放内存的机制。特别强调了内存分配后的检查、释放后指针应设为NULL,以及避免内存泄露和重复释放的重要性。
摘要由CSDN通过智能技术生成

动态内存的申请和释放

1. malloc() 和 free() 的基本概念以及基本用法

1.1 函数原型及说明:

void *malloc(long NumBytes)

该函数分配了 NumBytes 个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

关于分配失败的原因,应该有多种,比如说空间不足就是一种。

void free(void *FirstByte)

该函数是将之前用 malloc 分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由,可以被分配给其他函数(进程)。

1.2 被释放的指针

char *p = (char *)malloc(100 * sizeof(char));

当动态内存不再使用,就要将其所指向的空间释放掉,delete 和 free 函数一样,不修改它参数对应指针指向的内容,也不修改指针本身,只是在堆内存管理结构中 将指针指向的内容标记为可被重新分配 。就是告诉系统这个地址的内存我已经不用了,系统可以重新分配给别的程序了,这个地址p的值当然不会变,它只有在生存期结束后才会被释放。

1.3 注意事项

  • 申请了内存空间后,必须检查 是否分配成功

  • 当不需要再使用申请的内存时,记得释放;释放后应该把指向这块内存的指针指向 NULL ,防止程序后面不小心使用了它。

  • 这两个函数应该是配对。如果申请后不释放就是 内存泄露 (内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果);如果无故释放那就是什么也没有做。释放只能一次,如果释放两次及两次以上会出现错误(释放空指针例外,释放空指针其实也等于啥也没做,所以释放空指针释放多少次都没有问题)。

  • 虽然malloc()函数的类型是 (void *)ÿ

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值