Aracılığıyla paylaş


_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.

Ayrıca bkz.

Başvuru

Bellek ayırma

calloc

free

malloc

_msize

realloc