小甲鱼 发表于 2016-11-17 03:58:47

realloc -- 重新分配内存空间

realloc 函数文档

函数概要:

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

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

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

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

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

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


函数原型:

#include <stdlib.h>
...
void *realloc(void *ptr, size_t size);

参数解析:


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


返回值:

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

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

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

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


演示:

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

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

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

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

                ptr = num;
      } while(num != -1);

      printf("输入的整数分别是:");
      for (i = 0; i < count; i++)
      {
                printf("%d ", ptr);
      }
      printf("\n");

      free(ptr);

      return 0;
}


jamespp 发表于 2016-11-20 19:37:53

沙发

太别致旳温柔 发表于 2017-9-5 14:57:10

学习一下{:10_249:}

TyCk 发表于 2018-7-12 21:12:19

本帖最后由 TyCk 于 2018-7-12 21:15 编辑

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

呃,不报错,但有的数字不对。{:10_327:}

jiaolongxin 发表于 2021-1-31 10:08:35

{:10_257:}

Mr.LuCifer 发表于 2021-2-22 22:37:57

nice!

mpghhhhh 发表于 2022-4-16 21:18:16

学习学习
页: [1]
查看完整版本: realloc -- 重新分配内存空间