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

先决条件: 使用malloc(), calloc(), free()和realloc()在C中进行动态内存分配
名字分配和calloc()是动态分配内存的库函数。这意味着在运行时(程序执行)期间从堆段中分配了内存。
初始化:
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 < stdio.h> #include < stdlib.h> 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);

【malloc()和calloc()之间的区别与代码示例】注意:最好使用malloc而不是calloc, 除非我们想要零初始化, 因为malloc比calloc快。因此, 如果我们只想复制某些东西或执行不需要用零填充的块, 那么malloc是一个更好的选择。

    推荐阅读