_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。 如需詳細資訊,請參閱平台叫用範例。