当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 realloc用法及代码示例


C语言stdlib头文件(stdlib.h)中realloc函数的用法及代码示例。

用法:

void* realloc (void* ptr, size_t size);
重新分配内存块
更改由指向的内存块的大小ptr

该函数可以将存储块移动到新的位置(其地址由该函数返回)。

即使将存储块移动到新位置,该存储块的内容也会保留到新旧大小中的较小者。如果是新的size较大,则新分配部分的值不确定。

万一ptr是一个空指针,该函数的行为类似于malloc,分配一个新的size个字节,并返回指向其开头的指针。

否则,如果size为零,先前分配在的内存ptr被释放,就像对free做了,并且空指针返回。
如果size为零,则返回值取决于特定的库实现:它可以是空指针或其他不应取消引用的位置。

如果函数未能分配所请求的内存块,则返回空指针,并使用参数指向该内存块ptr未取消分配(它仍然有效,并且内容不变)。

参数

ptr
指向先前分配有一个内存块的指针malloccalloc或者realloc
或者,这可以是空指针,在这种情况下,将分配一个新块(就像malloc被称为)。
size
内存块的新大小,以字节为单位。
size_t是无符号整数类型。

返回值

指向重新分配的内存块的指针,该指针可以与ptr或新位置。
该指针的类型是void*,可以将其强制转换为所需的数据指针类型,以便将其取消引用。

示例

/* realloc example: rememb-o-matic */
#include <stdio.h>      /* printf, scanf, puts */
#include <stdlib.h>     /* realloc, free, exit, NULL */

int main ()
{
  int input,n;
  int count = 0;
  int* numbers = NULL;
  int* more_numbers = NULL;

  do {
     printf ("Enter an integer value (0 to end): ");
     scanf ("%d", &input);
     count++;

     more_numbers = (int*) realloc (numbers, count * sizeof(int));

     if (more_numbers!=NULL) {
       numbers=more_numbers;
       numbers[count-1]=input;
     }
     else {
       free (numbers);
       puts ("Error (re)allocating memory");
       exit (1);
     }
  } while (input!=0);

  printf ("Numbers entered: ");
  for (n=0;n<count;n++) printf ("%d ",numbers[n]);
  free (numbers);

  return 0;
}


程序会提示用户输入数字,直到输入零字符为止。每次引入新值时,数字所指向的存储块都会增加int



相关用法


注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C realloc function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。