共用方式為


_expand

變更記憶體區塊的大小。

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

參數

  • memblock
    先前配置的記憶體區塊的指標。

  • size
    以位元組為單位的新大小。

傳回值

_expand在重新配置的記憶體區塊會傳回 void 指標。 _expand不像realloc,不能移動以變更其大小的區塊。 因此,如果沒有足夠的記憶體來展開區塊,而不移動, memblock參數,以_expand傳回的值相同。

_expand傳回NULL當它的作業期間偵測到錯誤。 比方說,如果_expand是用來縮小記憶體區塊,它可能會偵測損毀中小區塊堆積或不正確的區塊指標,並傳回NULL。

如果沒有記憶體不足,無法展開至指定大小的區塊,而不移動它,則函數會傳回NULL。 _expand永遠不會傳回擴展成大小小於所要求的區塊。 發生故障時, errno指出失敗原因。 如需 errno 的詳細資訊,請參閱 errno、 _doserrno、 _sys_errlist 和 _sys_nerr

傳回的值會指向儲存空間,以保證會適當地對齊來儲存任何型別的物件。 若要檢查之項目的新的大小,請使用_msize。 若要取得指標的型別,而非void,請使用傳回的值時,施展型別。

備註

_expand函式變更先前配置的記憶體區塊的大小,藉由嘗試來展開或收縮區塊,而不移動其位置在堆積中的。 memblock參數指向區塊的開頭。 size參數指定的區塊,新的大小,以位元組為單位。 區塊的內容並不會變更至較短的新的和舊的大小。 memblock不應被釋出的區塊。

注意事項注意事項

在 64 位元平台, _expand新的大小小於目前的大小 ; 如果,則不可能會感染區塊 特別是如果區塊小於 16 K 的大小,因此配置低分散堆積中,在_expand會保留不變的區塊,並傳回memblock。

當應用程式被連結的 c 執行階段程式庫的偵錯版本_expand會解析成 _expand_dbg。 如需有關如何管理在偵錯的程序的堆積的詳細資訊,請參閱的 CRT 偵錯堆積

這個函式會驗證它的參數。 如果memblock是空值的指標,此函式在所述,會叫用無效的參數處理常式中, 參數驗證。 如果要繼續,請允許執行errno設定為 [ EINVAL ,則函數會傳回NULL。 如果size大於_HEAP_MAXREQ, errno設定為 [ ENOMEM ,則函數會傳回NULL。

需求

Function

所需的標頭

_expand

<malloc.h>

其他的相容性資訊,請參閱相容性在簡介中。

範例

// crt_expand.c

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

int main( void )
{
   char *bufchar;
   printf( "Allocate a 512 element buffer\n" );
   if( (bufchar = (char *)calloc( 512, sizeof( char ) )) == NULL )
      exit( 1 );
   printf( "Allocated %d bytes at %Fp\n", 
         _msize( bufchar ), (void *)bufchar );
   if( (bufchar = (char *)_expand( bufchar, 1024 )) == NULL )
      printf( "Can't expand" );
   else
      printf( "Expanded block to %d bytes at %Fp\n", 
            _msize( bufchar ), (void *)bufchar );
   // Free memory 
   free( bufchar );
   exit( 0 );
}
  

.NET Framework 對等用法

不適用。 若要呼叫標準的 c 函式,使用PInvoke。 如需詳細資訊,請參閱平台叫用範例

請參閱

參考

記憶體配置

calloc

free

malloc

_msize

realloc