c语言malloc和realloc
时间: 2023-11-27 18:42:59 浏览: 52
在C语言中,malloc和realloc都是用来动态分配内存空间的函数。它们的区别主要体现在两个方面:分配的方式和用法。
1. 分配的方式:
- malloc函数:通过指定需要分配的字节数来动态分配内存空间,返回值是一个指向分配内存空间的指针。
- realloc函数:通过指定需要重新分配的内存空间的指针和新的字节数来动态重新分配内存空间,返回值是一个指向重新分配内存空间的指针。
2. 用法:
- malloc函数:通常在初始化时或者需要动态分配内存空间时使用。需要手动计算需要分配的字节数。
- realloc函数:通常在已经动态分配内存空间的情况下,需要增加或者减少内存空间时使用。需要提供之前分配的内存空间的指针。
相关问题
c语言calloc和malloc,realloc
分别有什么区别?
calloc、malloc、realloc都是用于动态分配内存的函数。
malloc是最基本的内存分配函数,它只关心大小,不关心内存的内容。它返回的指针指向一段大小为 size 字节的内存块。如果申请失败,则返回 NULL。
calloc函数与malloc函数类似,也是用于动态分配内存,但calloc会在内存分配时清零。它接收两个参数,第一个参数指定分配的内存块数,第二个参数指定每个内存块的大小。它返回的指针指向一块大小为 size*count 字节的内存块。如果申请失败,则返回 NULL。
realloc函数用于重新分配一个已经分配的内存块的大小。它接收两个参数,第一个参数是原来分配的内存块的指针,第二个参数是重新分配的内存块的大小。如果重新分配的内存块的大小小于或等于原来分配的内存块的大小,则函数返回原来分配的内存块的指针;否则,系统将在另一个位置重新分配一块更大的内存块,并将原来分配的内存块中的数据复制到新的内存块中,然后释放原来分配的内存块,返回新分配的内存块的指针。
因此,calloc和malloc的区别是calloc会清零内存,而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。根据具体的需求,选择合适的函数来进行内存分配。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)