C语言学习笔记——动态内存管理

本文介绍了C语言的动态内存管理,包括malloc、calloc、realloc和free的使用,以及动态内存管理中的常见错误。此外,还讲解了C/C++程序内存分配的栈区、堆区、静态区和代码段。最后探讨了柔性数组的特点和与指针的区别。
摘要由CSDN通过智能技术生成

前言

在C语言中,若需要存储数据,则需要向内存申请空间。当我们定义一个变量时,编译器会自动向内存申请空间来储存在这个变量。这种内存管理方式有时是不便利的,它所开辟的内存空间大小是固定的。例如在VS编译器上,由于VS不支持变长数组,当我们需要根据不同情况确定不同的数组大小时较为困难。因此,C语言提供了动态内存管理用来更加灵活地管理内存空间。


一、动态内存函数

       C语言提供了四种动态内存函数用以进行动态内存管理,它们分别是malloc、calloc、realloc和free。

1. malloc和free

void* malloc (size_t size);

       malloc函数用以开辟一个大小为"size"个字节的内存空间,若开辟成功则返回该空间的起始地址,否则返回空指针。

       由于malloc函数在开辟内存空间时有可能失败,因此我们在调用完malloc之后最好是对malloc函数是否成功开辟内存空间进行一次检测,若检测开辟成功,再使用事先定义好的指针变量来接收malloc的返回值,若不成功,则直接报错并结束程序即可。由于malloc函数的返回类型为void*的指针,因此在使用时需强制类型转换成所需指针类型使用。若malloc函数的接收值为0,则它的操作取决于编译器,当然,我们应该避免这种情况的出现。

       但是,在动态内存管理中,动态开辟的内存并不会在程序结束后自动释放。因此在动态内存空间使用完毕后,我们最好将该内存空间释放,否则可能会造成内存泄露(包括malloc,calloc,realloc开辟的空间)。这时,我们就需要使用free函数来释放这些空间。

void free (void* ptr);

       free函数的接收值ptr为需要释放的动态内存空间的起始地址,若接收到一个有效地址,则会将该地址后的动态内存空间释放,若接收一个空指针,则无事发生(free函数不进行任何操作)。注意,free函数不可用来释放非动态开辟空间。

       下面为一段基础的动态内存应用代码。

int main()
{
    int* ptr = (int*)malloc(4); //申请动态内存空间
    if(ptr == NULL) //检测动态空间是否开辟成功
    {
        perror("malloc");  //开辟失败报错 
        retur
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值