_expand
變更記憶體區塊的大小。
void *_expand(
void *memblock,
size_t size
);
參數
memblock
指向先前配置的記憶體區塊的指標。size
新的大小 (以位元組為單位)。
傳回值
_expand 傳回 Void 指標到重新配置的記憶體區塊。 _expand不同於 realloc,無法捲動區塊變更其大小。 因此,如果有充足的記憶體以展開區塊,而不需不移動它,則給 _expand 的 memblock 參數與傳回值具有相同值。
發生在它的作業偵測到錯誤時,_expand 傳回 NULL 。 例如,如果已將 _expand 設定用來壓縮記憶體區塊,它可能會偵測小區塊堆積或無效的區塊指標並傳回 NULL。
如果沒有足夠的記憶體以展開區塊以供特定大小且不移動它,則函式會傳回 NULL。 _expand 不會回傳小於大小要求的區塊擴展。 如果失敗, errno 表示錯誤的性質。 如需 errno 的詳細資訊,請參閱 errno、_doserrno、_sys_errlist 和 _sys_nerr。
傳回值指向保證可以儲存任何型別的物件的適當地對齊的儲存空間。 若要檢查項目的新大小,請使用 _msize。 若要得到 void 之外的型別指標,請在傳回值上使用型別轉換。
備註
_expand 函式變更先前配置的記憶體區塊的大小會嘗試展開或壓縮區塊,而不會移動它的堆積的位置。 對區塊的 memblock 參數中開始點。 size 參數給區塊以位元組為單位的新大小。 區塊的內容不會由新舊大小決定變更。 memblock 不能是已經釋放的區塊。
注意事項 |
---|
在 64 位元平台上,因此,如果新的大小小於目前的大小, _expand 可能不會縮小成區塊;特別是,如果是因為區塊大小小於 16K 因此配置低分散堆積,則 _expand 留下區塊未變更並傳回 memblock。 |
當應用程式使用 C 執行期程式庫偵錯版本連結時,_expand 會解析為 _expand_dbg。 如需堆積在偵錯過程中的運作,請參閱 The CRT Debug Heap 。
這個函式會驗證它的參數。 如果 memblock為 null 指標,則函式叫用無效參數處理常式,如參數驗證 中所述。 如果允許繼續執行,errno 會設定為 EINVAL 且函式會傳回 NULL。 如果 size 大於 _HEAP_MAXREQ, errno 設定為 ENOMEM ,而且函式會傳回 NULL。
需求
功能 |
必要的標頭 |
---|---|
_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。如需詳細資訊,請參閱平台叫用範例。