Aracılığıyla paylaş


_expand

Bellek bloğunun boyutunu değiştirir.

Sözdizimi

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

Parametreler

memblock
Önceden ayrılmış bellek bloğu işaretçisi.

size
Bayt cinsinden yeni boyut.

Dönüş değeri

_expand yeniden ayrılan bellek bloğuna geçersiz bir işaretçi döndürür. _expand, aksine realloc, boyutunu değiştirmek için bir bloğu taşıyamaz. Bu nedenle, bloğu taşımadan genişletmek için yeterli bellek varsa parametresi _expand dönüş memblock değeriyle aynıdır.

_expand , işlemi sırasında bir hata algılandığında döndürür NULL . Örneğin, bir bellek bloğunu küçültmek için kullanılırsa _expand , küçük blok yığınında veya geçersiz bir blok işaretçisinde bozulma algılayıp döndürebilir NULL.

Bloğu taşımadan genişletmek için yeterli bellek yoksa işlev döndürür NULL. _expand hiçbir zaman istenenden daha küçük bir boyuta genişletilmiş bir bloğu döndürmez. Bir hata oluşursa, errno hatanın doğasını gösterir. hakkında errnodaha fazla bilgi için bkz.errno , _doserrno, _sys_errlistve _sys_nerr.

Dönüş değeri, herhangi bir nesne türünün depolaması için uygun olan bir depolama alanını gösterir. Öğenin yeni boyutunu denetlemek için kullanın _msize. dışında voidbir türe işaretçi almak için dönüş değerinde tür tür ataması kullanın.

Açıklamalar

İşlev, _expand yığının konumunu taşımadan bloğu genişletmeye veya daraltmaya çalışarak daha önce ayrılmış bir bellek bloğunun boyutunu değiştirir. memblock parametresi bloğun başlangıcını gösterir. size parametresi bloğun yeni boyutunu bayt cinsinden verir. Bloğun içeriği, yeni ve eski boyutların en kısasına kadar değiştirilmez. memblock serbest bırakılmış bir blok olmamalıdır.

Not

64 bit platformlarda, _expand yeni boyut geçerli boyuttan küçükse, bloğun boyutu 16.000'den küçükse ve bu nedenle Düşük Parçalanma Yığınında ayrılmışsa, _expand bloğu değişmeden bırakır ve döndürür memblock.

Uygulama C çalışma zamanı kitaplıklarının hata ayıklama sürümüyle bağlandığında, _expand olarak _expand_dbgçözümlenir. Yığın hata ayıklama işlemi sırasında nasıl yönetilir hakkında daha fazla bilgi için bkz . CRT hata ayıklama yığını.

Bu işlev parametrelerini doğrular. Boş bir işaretçiysememblock, bu işlev Parametre doğrulama bölümünde açıklandığı gibi geçersiz bir parametre işleyicisi çağırır. Yürütmenin devam etmesi için izin verilirse, errno olarak ayarlanır EINVAL ve işlevi döndürür NULL. değerinden büyüksesize, olarak ENOMEMayarlanır ve işlevi döndürürNULL._HEAP_MAXREQerrno

Varsayılan olarak, bu işlevin genel durumunun kapsamı uygulama olarak belirlenmiştir. Bu davranışı değiştirmek için bkz. CRT'de Genel durum.

Gereksinimler

İşlev Gerekli başlık
_expand <malloc.h>

Daha fazla uyumluluk bilgisi için bkz . Uyumluluk.

Ö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 );
}
Allocate a 512 element buffer
Allocated 512 bytes at 002C12BC
Expanded block to 1024 bytes at 002C12BC

Ayrıca bkz.

Bellek ayırma
calloc
free
malloc
_msize
realloc