共用方式為


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 函式來設定新的處理常式模式。 新的處理常式 mode 指出是否在失敗時, malloc就是呼叫新的處理常式所設定的 _set_new_handler。 預設情況下, malloc不會將新的處理常式呼叫上配置記憶體失敗。 您可以覆寫此預設行為,以便,當realloc無法配置記憶體, malloc在同一個呼叫新的處理常式,就像new運算子不會因相同原因而失敗時。 若要覆寫預設值,請呼叫

_set_new_mode(1)

如果出版物的早期的程式或與 NEWMODE 的連結。OBJ (see 連結選項).

當應用程式被連結的 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