公众号:嵌入式不难
本文仅供参考学习,如有错误之处,欢迎留言指正。
接口
void *realloc(void *ptr, size_t size);
描述:将 ptr 指向的内存块长度重新分配为 size 字节。
返回值:重新分配 size 字节后所指向的内存块地址。
使用场景不同,结论如下
realloc(NULL, 10)
等效于malloc(10)
realloc(ptr, 0)
等效于free(ptr)
- 当 size_old(原长度) > size 时,原 ptr 的内容保持不变,追加的内存空间值未知。
- 当 size_old(原长度) <= size 时,原 ptr 的内容保持不变,不会重新分配内存。
实验验证
当 size_old(原长度) > size 时
实验代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argv, char *arg[])
{
char *p = malloc(16);
strcat(p, "0123");
printf("before realloc\n");
printf("p.address=%p\n", p);
printf("p.content=%s\n", p);
p = realloc(p, 32);
printf("\nafter realloc\n");
printf("p.address=%p\n", p);
printf("p.content=%s\n", p);
free(p);
return 0;
}
实验结果
before realloc
p.address=0x1a70010
p.content=0123
after realloc
p.address=0x1a70440
p.content=0123
当 size_old(原长度) <= size 时
实验代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argv, char *arg[])
{
char *p = malloc(16);
strcat(p, "0123");
printf("before realloc\n");
printf("p.address=%p\n", p);
printf("p.content=%s\n", p);
p = realloc(p, 1);
printf("\nafter realloc\n");
printf("p.address=%p\n", p);
printf("p.content=%s\n", p);
free(p);
return 0;
}
实验结果
before realloc
p.address=0x1258010
p.content=0123
after realloc
p.address=0x1258010
p.content=0123