malloc realloc calloc的区别
时间: 2023-08-20 08:18:18 浏览: 115
这三个函数都用于动态内存分配,但是它们有以下区别:
1. malloc函数:用于分配指定字节数的内存空间,返回一个指向所分配内存的指针。分配的内存区域中的初始值不确定。
2. realloc函数:用于修改之前分配的内存空间的大小,可以扩大或缩小内存空间,返回一个指向所分配内存的指针。当然,如果需要扩大内存空间,realloc函数可能会将原先的内存块移动到另一个更大的空间中,因此,使用realloc函数可能会导致之前的指针失效。
3. calloc函数:与malloc函数相似,也是用于分配内存空间,但是它会在分配的内存空间中初始化每个字节为0。calloc函数的参数是需要分配空间的数量和每个空间的大小。
总的来说,这三个函数的区别在于它们分配内存的方式不同,以及它们对内存的操作也有所不同。使用时需要根据具体的需求选择合适的函数。
相关问题
malloc calloc realloc区别
malloc、calloc和realloc都是C语言中用于动态内存分配的函数,它们之间的区别如下:
1. malloc函数:用于分配指定大小的内存块,返回指向该内存块起始地址的指针。该函数只分配内存,不会对内存进行初始化。
2. calloc函数:用于分配指定数量、指定大小的内存块,返回指向该内存块起始地址的指针。该函数会将分配的内存块全部初始化为0。
3. realloc函数:用于重新分配之前已经分配的内存块的大小,返回指向该内存块起始地址的指针。如果原先分配的内存块大小不足以存储新的数据,realloc函数会重新分配一块新的内存块,并将原先内存块中的数据复制到新的内存块中,然后释放原先的内存块。
下面是三个函数的使用示例:
1. malloc函数的使用示例:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)malloc(sizeof(int)); // 分配一个int类型的内存块
if (p == NULL) {
printf("malloc failed\n");
return -1;
}
*p = 10; // 给内存块赋值
printf("%d\n", *p); // 输出内存块的值
free(p); // 释放内存块
return 0;
}
```
2. calloc函数的使用示例:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)calloc(1, sizeof(int)); // 分配一个int类型的内存块,并将其初始化为0
if (p == NULL) {
printf("calloc failed\n");
return -1;
}
printf("%d\n", *p); // 输出内存块的值
free(p); // 释放内存块
return 0;
}
```
3. realloc函数的使用示例:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *p = (int*)malloc(sizeof(int)); // 分配一个int类型的内存块
if (p == NULL) {
printf("malloc failed\n");
return -1;
}
*p = 10; // 给内存块赋值
printf("%d\n", *p); // 输出内存块的值
p = (int*)realloc(p, sizeof(int) * 2); // 重新分配内存块的大小
if (p == NULL) {
printf("realloc failed\n");
return -1;
}
*(p + 1) = 20; // 给新的内存块赋值
printf("%d %d\n", *p, *(p + 1)); // 输出两个内存块的值
free(p); // 释放内存块
return 0;
}
```
malloc/calloc/realloc的区别
malloc、calloc和realloc都是动态分配内存的函数,它们的区别在于:
1. malloc分配的内存是未经初始化的,calloc分配的内存会被初始化成0;
2. realloc可以调整已分配内存的大小,而malloc和calloc则不行。
因此,如果需要分配一块内存并对其进行初始化,则应该使用calloc函数;如果需要调整已分配内存的大小,则应该使用realloc函数。而如果只是简单地分配一块内存,则可以使用malloc函数。
阅读全文