动态内存分配函数(C语言)

目录

头文件

malloc

memset

calloc

realloc

free

内存泄漏

malloc与calloc的区

头文件

        stdlib.h                                                                     

                malloc                                                                 

                calloc

                free

                realloc

        string.h

              memset

malloc

作用: 在堆区动态申请内存

语法:

void *malloc(size_t size);
    参数:
        size_t size:申请的内存地址大小,单位字节
        数据类型所占字节:sizeof(数据类型)

                (需要获取的元素个数)*(数据类型所占字节)
    返回值:
        void *:申请的内存的首地址,如果地址返回为NULL说明申请失败

注意:

        1.申请内存后要判断申请是否成功

                如果nums为空则代表申请内存失败

if (nums == NULL)
{
    printf("申请失败\n");
    return 0;
}

        2.malloc开辟的空间内默认值为随机数,因此需要使用memset函数将所有值初始化为0.

                memset函数如下

        3.动态内存分配的内存在堆区,无法自动释放,需要手动释放


memset

作用: 将指定开始位置到指定长度的内存中的内容设置为指定的值

语法:

void *memset(void *s, int c, size_t n);
    参数:
            void *s:开始的地址
            int c:指定的内容
            n:设定的长度
    返回值:
            设置的内存的首地址,也就是开辟的地址的首地址


calloc

作用: 在堆区动态申请内存

语法:

void *calloc(size_t nmemb, size_t size);
    参数:
        nmemb:申请的内存块数
        size:每块所占的字节数
    返回值:
        void *:申请的内存的首地址,如果为NULL说明申请失败

注意:

        size_t 实际是无符号整型,它是在头文件中,用 typedef 定义出来的。


realloc

作用: 追加内存

语法:

void *realloc(void *ptr, size_t size);
    参数:
        void *ptr:要追加的内存的首地址
        size:重新申请的大小,单位字节
    返回值:
        void *:追加的内存的首地址,如果为NULL说明追加失败

注意:

        该函数并不是在原基础上追加,而是从新开辟一片内存,将原内存中的值拷贝到新内存的前面


free

作用: 释放动态申请的内存

语法:

void free(void *ptr)
    参数:
        void *ptr:要释放的内存的首地址
    返回值:
        void:没有返回值

        内存申请后,相对大一点的程序,如果没有释放内存,内存占完后,程序就不能继续运行下去,因此,在申请内存后,在保证使用结束的情况下要及时释放,而且要遵循由里向外释放,如果先释放了外部的内存,就会出现内存泄漏


内存泄漏

        申请的内存,丢失了地址,无妨访问这片内存,既无法调用也无法删除

        因此使用完申请的内存后需要释放

可能存在的情况:

        1.指向堆区的指针变量被其他地址赋值,指向了其他地方,原来的那篇内存地址就丢失了

        2.在函数中,函数调用完毕,指针被释放,内存未释放,也会到时地址丢失,内存泄漏


malloc与calloc的区别

malloc 和 calloc 函数都是用来申请内存的。
        区别:
                1) 函数的名字不一样
                2) 参数的个数不一样
                3) malloc 申请的内存,内存中存放的内容是随机的,不确定的,而 calloc 函数申请的内存中的内容为 0

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值