_expand
Bir bellek bloğunun boyutu değişir.
void *_expand(
void *memblock,
size_t size
);
Parametreler
memblock
Daha önce ayrılmış bellek bloğu için işaretçi.size
Yeni boyutunu bayt cinsinden.
Dönüş Değeri
_expandreallocated bellek bloğu void bir işaretçi döndürür. _expand, aksine realloc, bir blok boyutunu değiştirmek için taşıyamazsınız. Bu nedenle, taşımadan bloğu genişletmek kullanılabilir yeterli bellek yoksa, memblock parametresi _expand dönüş değeri aynıdır.
_expanddöner NULL , işlem sırasında bir hata algılandığında. Örneğin, _expand olan bir bellek bloğu küçültmek için kullanılan küçük blok öbek veya geçersiz blok işaretçisi bozulmayı algılamak ve iade NULL.
İşlev verir olup olmadığını blok hareket ettirmeden verilen boyuta genişletmek kullanılabilir bellek yetersiz, NULL. _expandhiçbir zaman istenen'den küçük bir boyuta genişletilmiş bir blok döndürür. Bir hata oluşursa, errno hatanın mahiyetini gösterir. errno hakkında daha fazla bilgi için, bkz. errno, _doserrno, _sys_errlist ve _sys_nerr.
Dönüş değeri herhangi bir nesne türünü depolanması için yeterince hizalanması için garantili bir depolama alanı işaret eder. Yeni madde boyutunu denetlemek için _msize. Bir işaretçi dışında bir tür almak için void, dönüş değerini artığını türü kullanın.
Notlar
_expand İşlevini genişletmek veya blok yığınındaki konumunu taşımadan sözleşme deneyerek önceden ayrılmış bellek bloğu boyutunu değiştirir. memblock Parametresi bloğunun başlangıcına işaret ediyor. size Parametre bloğu yeni boyutunu bayt cinsinden verir. Blok içeriği kadar kısa eski ve yeni boyutları değiştirilmez. memblockserbest bırakılmış bir engelleme olmamalıdır.
Not
64-Bit platformlarda _expand yeni boyutu geçerli boyutu; azsa blok sözleşme. blok boyutu küçüktür 16 k oldu ve bu nedenle Düşük Parçalanma Yığın içinde ayrılan, özellikle _expand blok değiştirmeden bırakır ve döner memblock.
Uygulama hata ayıklama sürümü c çalışma zamanı kitaplıkları ile bağlandığında _expand çözümler _expand_dbg. Yığın hata ayıklama işlemi sırasında nasıl yönetildiği hakkında daha fazla bilgi için Hata ayıklama crt öbek.
Bu işlev parametreleri doğrular. memblock Bir null işaretçi açıklandığı gibi bir geçersiz parametre işleyicisi bu işlevi çağırır Parametre doğrulama. Yürütülmesine devam etmek için izin verilip verilmediğini errno ayarlamak EINVAL işlevini verir ve NULL. size Büyüktür: _HEAP_MAXREQ, errno ayarlamak ENOMEM işlevini verir ve NULL.
Gereksinimler
İşlev |
Gerekli başlık |
---|---|
_expand |
<malloc.h> |
Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.
Örnek
// 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 Eşdeğeri
Yoktur. Standart c işlevi çağırmak için kullanmak PInvoke. Daha fazla bilgi için bkz: Platform Çağırma örnekleri.