malloc与realloc区别
时间: 2024-05-18 07:16:26 浏览: 88
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
都是C语言中动态内存分配的函数,malloc用于分配指定大小的内存空间,realloc用于重新分配已经分配的内存空间的大小。当需要动态分配内存时,可以使用malloc函数来分配内存,当需要重新分配已经分配的内存空间时,可以使用realloc函数来重新分配内存大小。
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;
}
```
阅读全文