realloc

重新分配内存块。

void *realloc(
   void *memblock,
   size_t size 
);

参数

  • memblock
    对以前指定的指针内存块。

  • size
    新的大小 (以字节为单位)。

返回值

realloc 返回 void 指针重新分配的 (也可能是移动) 内存块。

如果未展开块足够的可用内存到给定范围,原始的块保持不变,并且, NULL 返回。

如果 size 为零,则块指向由 memblock 释放;返回值是 NULL,并且, memblock 左侧点在释放的块。

返回值指向确保为任何类型的对象存储正确对齐的存储空间。获取对一个类型的指针 void除了之外,将使用一个返回值的类型转换。

备注

分配的内存块范围的 realloc 函数。memblock 参数指向的开头内存块。如果 memblock 是 NULL, realloc 相同的行为与 malloc 并分配新块 size 字节。如果 memblock 不是 NULL,它应该是前一个返回的指针调用 calloc、 malloc或 realloc。

size 参数指定块的新范围,以字节为单位)。块的内容保持不变的最短新的,并且旧范围,不过,新块可以在不同的位置。由于新块可以在新的内存位置, realloc 返回的指针不一定指针传递 memblock 参数。realloc 不零最近分配的内存缓冲区后增大。

realloc 设置 errno 到 ENOMEM ,如果内存分配失败,或如果内存请求的数据量超过 _HEAP_MAXREQ。有关此更改和其他错误代码的信息,请参见 errno、_doserrno、_sys_errlist和_sys_nerr

realloc调用 malloc为了使用 C++ _set_new_mode 功能将新的处理程序模式。新的处理程序模式指示,在失败时, malloc 是否调用新的处理程序实例由设置由 _set_new_handler。默认情况下, malloc 不调用在发生故障的新处理程序实例分配内存。可以重写此默认行为,以便,那么,当 realloc 不能分配内存时, malloc 类似的方式调用新的处理程序实例 new 运算符,则它的原因相同失败。若要重写默认值,请调用

_set_new_mode(1)

早期与 NEWMODE.OBJ 的部分程序或链接 (请参见 LINK选项)。

当应用程序使用 C 运行库时的调试版本链接, realloc 解析为 _realloc_dbg。有关堆方式的更多信息管理在调试过程中,请参见 CRT 调试堆

realloc 标记为 __declspec(noalias) 和 __declspec(restrict),这意味着函数保证不修改全局变量,因此,返回的指针没有抗锯齿。有关更多信息,请参见 noalias限制

要求

实例

必需的头

realloc

stdlib.h 和 malloc.h

有关其他的兼容性信息,请参见中介绍的 兼容性

示例

// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
 

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

int main( void )
{
   long *buffer, *oldbuffer;
   size_t size;

   if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
      exit( 1 );

   size = _msize( buffer );
   printf_s( "Size of block after malloc of 1000 longs: %u\n", size );

   // Reallocate and show new size:
   oldbuffer = buffer;     // save pointer in case realloc fails
   if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) )) 
        ==  NULL )
   {
      free( oldbuffer );  // free original block
      exit( 1 );
   }
   size = _msize( buffer );
   printf_s( "Size of block after realloc of 1000 more longs: %u\n", 
            size );

   free( buffer );
   exit( 0 );
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见 平台调用示例

请参见

参考

内存分配

calloc

free

malloc