先决条件:使用malloc(),calloc(),free()和realloc()在C中进行动态内存分配
名称malloc和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
#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);
Note: It would be better to use malloc over calloc, unless we want the zero-initialization because malloc is faster than calloc. So if we just want to copy some stuff or do something that doesn’t require filling of the blocks with zeros, then malloc would be a better choice.
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。