鱼C论坛

 找回密码
 立即注册
查看: 10811|回复: 6

[函数快查] realloc -- 重新分配内存空间

[复制链接]
发表于 2016-11-17 03:58:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
realloc 函数文档


函数概要:

1. realloc 函数修改 ptr 指向的内存空间大小为 size 字节。

2. 如果新分配的内存空间比原来的大,则旧内存块的数据不会发生改变;如果新的内存空间大小小于旧的内存空间,可能会导致数据丢失,慎用!

3. 该函数将移动内存空间的数据并返回新的指针。

4. 如果 ptr 参数为 NULL,那么调用该函数就相当于调用 malloc(size)。

5. 如果 size 参数为 0,并且 ptr 参数不为 NULL,那么调用该函数就相当于调用 free(ptr)。

6. 除非 ptr 参数为 NULL,否则 ptr 的值必须由先前调用 malloccalloc 或 realloc 函数返回。


函数原型:

  1. #include <stdlib.h>
  2. ...
  3. void *realloc(void *ptr, size_t size);
复制代码


参数解析:

参数 含义
ptr 1. 指向由先前调用 malloccalloc 或 realloc 函数返回的内存空间
2. 如果该参数为 NULL,相当于调用 malloc(size) 函数
size 指定新的内存块空间大小,以字节为单位


返回值:

1. 如果函数调用成功,返回值是指向新的内存空间的指针,由于返回类型是 void 指针(void *),所以它可以被转换成任何类型的数据。

2. 如果函数调用失败,返回值是 NULL。

3. 如果 size 参数设置为 0,返回值也可能是 NULL,也可能返回一个指针值,稍后可以传递给 free 函数。

4. 如果 realloc 函数调用失败,那么原始内存空间的数据并不会修改,也不会被释放或移动。


演示:

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. int main(void)
  4. {
  5.         int i, num;
  6.         int count = 0;
  7.         int *ptr = NULL; // 注意,这里必须初始化为NULL

  8.         do
  9.         {
  10.                 printf("请输入一个整数(输入-1表示结束):");
  11.                 scanf("%d", &num);
  12.                 count++;

  13.                 ptr = (int *)realloc(ptr, count * sizeof(int));
  14.                 if (ptr == NULL)
  15.                 {
  16.                        printf("内存空间不足!\n");
  17.                        exit(1);
  18.                 }

  19.                 ptr[count-1] = num;
  20.         } while(num != -1);

  21.         printf("输入的整数分别是:");
  22.         for (i = 0; i < count; i++)
  23.         {
  24.                 printf("%d ", ptr[i]);
  25.         }
  26.         printf("\n");

  27.         free(ptr);

  28.         return 0;
  29. }
复制代码

搜狗截图20161118004617.png

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-20 19:37:53 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-5 14:57:10 | 显示全部楼层
学习一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-12 21:12:19 | 显示全部楼层
本帖最后由 TyCk 于 2018-7-12 21:15 编辑

话说,参数size_t size这里,必须要乘以sizeof(int)吗?
不乘的话,结果好像一样啊。


呃,不报错,但有的数字不对。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-31 10:08:35 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-22 22:37:57 | 显示全部楼层
nice!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-16 21:18:16 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表