美文网首页
malloc 和 free

malloc 和 free

作者: 小阿牛的爸爸 | 来源:发表于2021-10-21 16:21 被阅读0次

    头文件位置

    #include <stdio.h>
    

    1 malloc

    1.1 函数原型

    void* malloc (size_t size);
    

    1.2 函数介绍

    分配一个大小为size字节的内存块,返回一个指向块开头的指针。
    新分配的这块内存空间没有初始化,里面的内容是不确定的,所以,在使用前需要进行初始化
    如果size为0,返回值取决于特定的库实现(它可能是空指针,也可能不是空指针),但返回的指针不能解引用。

    1.3 函数入参

    要分配的空间的大小,单位为字节,size_t是一个无符号的整型

    1.4 函数返回值

    指向块开头的指针。

    2 free

    2.1 函数原型

    void free (void* ptr);
    

    2.2 函数介绍

    释放之前由调用malloc、calloc或realloc分配的内存块,使其可以再次用于进一步的分配。
    如果传入的指针ptr没有指向用上述函数分配的内存块,则会导致不确定的行为
    如果ptr是空指针,则函数不执行任何操作。
    注意,这个函数并没有改变ptr本身的值,因此它仍然指向相同的(现在是无效的)位置

    2.3 函数入参

    指向先前用malloc、calloc或realloc分配的内存块的指针。

    2.4 函数返回值

    无。

    3 示例

    使用流程如下:
    malloc(size)分配地址空间 -> 分配后进行初始化 -> 使用后调用free释放掉空间

    #include <stdio.h>      /* printf, scanf, NULL */
    #include <stdlib.h>     /* malloc, free, rand */
    
    int main ()
    {
        int i,n;
        char * buffer;
    
        printf ("How long do you want the string? ");
        scanf ("%d", &i);
        // 1. 分配空间
        buffer = (char*) malloc (i+1);
        if (buffer==NULL) {
            printf ("malloc space error\n");
            exit (1);
        }
        
        // 2. 初始化并赋值
        for (n=0; n<i; n++) {
            buffer[n]=rand()%26+'a';
        }
        buffer[i]='\0';
    
        printf ("Random string: %s\n",buffer);
        // 3. 使用完成后释放
        free (buffer);
    
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:malloc 和 free

          本文链接:https://www.haomeiwen.com/subject/rdxhaltx.html