C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言动态内存函数

C语言动态内存函数(malloc、calloc、realloc、free)详解

作者:一个小脑袋

在C语言中,动态内存函数是块重要的知识点,以往,我们开辟空间都是固定得,数组编译结束后就不能继续给它开辟空间了,开辟的空间满了,就不能在开辟空间了,学习本文章,我们就可以解决这个问题,向内存申请空间,感兴趣的小伙伴跟着小编一起来看看吧

一、malloc函数

需要头文件——<stdlib.h>

在这里插入图片描述

浏览器直接翻译:

在这里插入图片描述

malloc函数(动态内存开辟的函数):

void* malloc(size_t size);

功能:

#include <stdio.h>
#include <stdlib.h>
int main()
{
//变长数组的知识点(vs不能用,gcc可以用)
    //int num = 0;
    //scanf("%d", &num);
    //int arr[num] = { 0 };
    int* ptr = NULL;
    ptr = (int*)malloc(40);
    if (ptr == NULL)//判断ptr指针是否为空
    {
        perror("malloc");
        exit; 
    }
    else
    {
        int i = 0;
        for (i = 0; i < 10; i++)//给开辟的空间赋值
            ptr[i] = i + 1;
    }
    free(ptr);//释放ptr指向的空间
    ptr = NULL;//让ptr指向空
    return 0;
}

二、calloc函数

需要头文件——<stdlib.h>

在这里插入图片描述

浏览器直接翻译:

在这里插入图片描述

calloc函数(动态内存分配函数):

void* calloc(size_t num, size_t size);

功能:

举个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* p = (int*)calloc( 10,sizeof(int));
    if (p == NULL)//成立,开辟失败
    {
        perror("calloc");
        exit;
    }
    free(p);
    p = NULL;
    return 0;
}

p指向的地址:

在这里插入图片描述

三、realloc函数

需要头文件——<stdlib.h>

在这里插入图片描述

浏览器直接翻译:

在这里插入图片描述

realloc函数(动态内存管理更加灵活):

有时候我们发现过去申请的空间小了,有时候我们会觉得过去申请的空间过大,为了合理使用内存,我们一定要对内存的大小做灵活的调整。realloc函数可以做到对动态开辟内存大小进行调整。

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

功能:

注意:

realloc调整内存空间有两种情况。

在这里插入图片描述

在这里插入图片描述

所以我们在使用realloc函数的时候一定要注意:

1、开辟新的空间。

2、 会将旧的空间数据拷贝到新的空间。

3、释放旧的空间。

4、返回新空间的起始地址。

举个例子:

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* ptr =(int*) malloc( 100 );
    if (ptr != NULL)
    {
//可以使用这个空间
    }
    else
    {
        perror("malloc");
        exit;
    }
    //扩展空间
    int* p = (int*)realloc(ptr, 1000);//可能增容失败
    if (p != NULL)
    {
        //增容成功
        ptr = p;//p指向的空间交给ptr去维护
    }
    free(ptr);//把开辟早堆上的空间释放掉
    ptr = NULL;
    return 0;
}

四、free函数

需要头文件——<stdlib.h>

在这里插入图片描述

浏览器直接翻译:

在这里插入图片描述

free函数(释放动态开辟的内存):

void* free(void* ptr);

功能:

到此这篇关于C语言动态内存函数(malloc、calloc、realloc、free)详解的文章就介绍到这了,更多相关C语言动态内存函数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文