📜  malloc()和calloc()之间的区别与示例

📅  最后修改于: 2021-05-25 23:58:19             🧑  作者: Mango

先决条件:使用malloc(),calloc(),free()和realloc()在C中进行动态内存分配

名称malloccalloc()是动态分配内存的库函数。这意味着在运行时(程序执行)期间会从堆段中分配内存。

  • 初始化: malloc()分配给定大小(以字节为单位)的内存块,并返回一个指向该块开头的指针。 malloc()不会初始化分配的内存。如果尝试访问内存块的内容(在初始化之前),则将得到分段错误错误(或可能是垃圾值)。
    void* malloc(size_t size);
    

    calloc()分配内存,还将分配的内存块初始化为零。如果我们尝试访问这些块的内容,则将得到0。

    void* calloc(size_t num, size_t size);
    
  • 参数数量:与malloc()不同,calloc()接受两个参数:
    1)要分配的块数。
    2)每个块的大小。
  • 返回值:在malloc()和calloc()中成功分配之后,将返回指向内存块的指针,否则返回NULL值,指示分配失败。

    例如,如果我们要为5个整数的数组分配内存,请参见以下程序:

    // C program to demonstrate the use of calloc()
    // and malloc()
    #include 
    #include 
      
    int main()
    {
        int* arr;
      
        // malloc() allocate the memory for 5 integers
        // containing garbage values
        arr = (int*)malloc(5 * sizeof(int)); // 5*4bytes = 20 bytes
      
        // Deallocates memory previously allocated by malloc() function
        free(arr);
      
        // calloc() allocate the memory for 5 integers and
        // set 0 to all of them
        arr = (int*)calloc(5, sizeof(int));
      
        // Deallocates memory previously allocated by calloc() function
        free(arr);
      
        return (0);
    }
    

    我们可以通过使用malloc()和memset()来实现与calloc()相同的功能,

    ptr = malloc(size);
    memset(ptr, 0, size);
    
    想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。