malloc与realloc
时间: 2023-05-11 21:02:47 浏览: 59
都是C语言中动态内存分配的函数,malloc用于分配指定大小的内存空间,realloc用于重新分配已经分配的内存空间的大小。当需要动态分配内存时,可以使用malloc函数来分配内存,当需要重新分配已经分配的内存空间时,可以使用realloc函数来重新分配内存大小。
相关问题
malloc与realloc区别
malloc和realloc都是C语言中用于动态内存分配的函数。
malloc函数用于分配指定大小的内存块,并返回一个指向该内存块起始位置的指针。它的函数原型如下:
```
void* malloc(size_t size);
```
其中,size_t是一个无符号整数类型,表示要分配的字节数。如果内存分配成功,则返回指向分配的内存块的指针;如果分配失败,则返回NULL。
realloc函数用于重新分配之前使用malloc或calloc函数分配的内存块的大小。它的函数原型如下:
```
void* realloc(void* ptr, size_t size);
```
其中,ptr是一个指向之前分配的内存块的指针,size是需要重新分配的字节数。realloc函数将会尝试重新分配ptr指向的内存块,如果成功,则返回指向重新分配后内存块起始位置的指针;如果失败,则返回NULL。需要注意的是,如果realloc函数失败,则原来分配的内存块仍然有效,不会被释放。
两者的主要区别在于:
1. malloc函数只能用于内存的初始分配,而realloc函数可以用于动态调整内存块的大小;
2. realloc函数在重新分配内存时,会尽量保留之前分配的内容。如果新的大小大于之前分配的大小,那么额外的内存空间可能是未初始化的;
3. realloc函数的第一个参数是之前分配的内存块的指针,而malloc函数不需要传入这个参数。
总的来说,malloc和realloc都是用于动态内存分配的函数,但malloc只能用于初始分配,而realloc可以用于动态调整内存块的大小。
malloc和realloc
malloc和realloc是C语言中用于动态内存分配的函数。
malloc函数用于分配指定大小的内存空间,并返回一个指向该内存空间的指针。它的原型如下:
void* malloc(size_t size);
realloc函数用于重新分配已经分配的内存空间的大小。它接受两个参数,第一个参数是指向已经分配内存的指针,第二个参数是新的内存大小。如果新的内存大小大于原来分配的大小,那么realloc会扩大内存空间;如果新的内存大小小于原来分配的大小,那么realloc会缩小内存空间。它的原型如下:
void* realloc(void* ptr, size_t size);
与calloc函数相比,malloc和realloc不会对分配的内存进行初始化,而是返回一块未初始化的内存空间。而calloc函数在分配内存之前会将每个字节初始化为0。因此,在使用malloc和realloc分配的内存空间之前,我们需要手动对其进行初始化。
下面是一个使用malloc和realloc的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int* p1 = malloc(10 * sizeof(int));
if (p1 != NULL) {
// 使用空间
}
int* p2 = realloc(p1, 20 * sizeof(int));
if (p2 != NULL) {
// 使用空间
}
free(p2);
p2 = NULL;
return 0;
}
```
在这个示例中,首先使用malloc函数分配了一块大小为10个int类型的内存空间,然后使用realloc函数将其扩大为20个int类型的内存空间。最后,使用free函数释放了已经分配的内存空间。
总结起来,malloc和realloc函数用于动态分配内存空间,而calloc函数在分配内存之前会将每个字节初始化为0。根据具体的需求,选择合适的函数来进行内存分配。