malloc/calloc/realloc的区别?
时间: 2023-08-05 19:02:36 浏览: 50
malloc、calloc和realloc是C语言中用于动态内存分配的函数。
1. malloc函数用于分配指定大小的内存块,并返回分配的内存块的首地址。它接受一个参数,即要分配的字节数。例如,malloc(10)将分配10个字节的内存块。
2. calloc函数类似于malloc函数,不同之处在于它除了分配指定大小的内存块外,还会将分配的内存块中的每个字节都初始化为零。它接受两个参数,第一个参数是要分配的元素个数,第二个参数是每个元素的大小。例如,calloc(5, sizeof(int))将分配5个int类型大小的内存块,并将每个元素初始化为零。
3. realloc函数用于重新调整之前分配的内存块的大小。它接受两个参数,第一个参数是之前分配的内存块的指针,第二个参数是重新分配的字节数。如果新的字节数大于之前分配的内存块大小,realloc将分配一个新的内存块,并将原始数据复制到新的内存块中。如果新的字节数小于或等于之前分配的内存块大小,realloc将缩小内存块的大小,并返回原始内存块的指针。
总结:
- malloc只负责分配指定大小的内存块。
- calloc在分配内存块的同时,会将每个字节初始化为零。
- realloc可以重新调整之前分配的内存块的大小,包括扩大和缩小,并且可以复制原始数据到新的内存块中。
相关问题
malloc/calloc/realloc的区别
malloc、calloc和realloc都是动态分配内存的函数,它们的区别在于:
1. malloc分配的内存是未经初始化的,calloc分配的内存会被初始化成0;
2. realloc可以调整已分配内存的大小,而malloc和calloc则不行。
因此,如果需要分配一块内存并对其进行初始化,则应该使用calloc函数;如果需要调整已分配内存的大小,则应该使用realloc函数。而如果只是简单地分配一块内存,则可以使用malloc函数。
malloc/calloc/recalloc的区别
1. malloc:用于动态分配指定字节数的内存,返回值是void*类型,需要强制类型转换。
2. calloc:用于动态分配指定个数和大小的内存,并清空内存中的内容(将其初始化为0),返回值是void*类型,需要强制类型转换。
3. realloc:用于重新分配已经分配的内存,可以增加或减少内存的大小,返回值是void*类型,需要强制类型转换。如果重新分配的内存大小比原来的小,那么原来的内存将被截断,多余的部分将被释放掉。
总的来说,malloc和calloc都是用来分配内存的函数,而realloc则是用来重新分配内存的函数。其中,calloc在分配内存时会把内存中的内容初始化为0,而malloc则不会。另外,realloc还可以用来增加或减少内存的大小。