共用方式為


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 最近非零配置記憶體。

如果記憶體配置失敗,或是要求的記憶體數量超過 _HEAP_MAXREQ,則 realloc 會將 errno 設定為 ENOMEM。 如需有關這個錯誤碼及其他錯誤碼的詳細資訊,請參閱 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 連結 (請參閱連結選項)。

當應用程式使用 C 執行期程式庫偵錯版本連結時,realloc 會解析為 _realloc_dbg。 如需堆積在偵錯過程中的運作,請參閱 The CRT Debug Heap

realloc 會標示為 __declspec(noalias) 和 __declspec(restrict),這表示函式保證不會修改全域變數且傳回的指標不會產生別名。 如需詳細資訊,請參閱 noaliasrestrict

需求

常式

必要的標頭

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

釋放

malloc