realloc
Bellek blokları yeniden tahsis edilir.
void *realloc(
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
reallocdöndüren bir void reallocated (ve büyük olasılıkla taşınan) bellek bloğu için işaretçi.
Blok verilen boyuta genişletmek için yeterli kullanılabilir bellek yoksa, özgün blok değiştirilmeden olduğu, ve NULL döndürülür.
size Sıfır ise, göre sıralanmasını engelleme memblock serbest; Dönüş değeri NULL, ve memblock boşaltılmış bloğunda işaret bırakılır.
Dönüş değeri herhangi bir nesne türünü depolanması için yeterince hizalanması için garantili bir depolama alanı işaret eder. Bir işaretçi dışında bir tür almak için void, dönüş değerini artığını türü kullanın.
Notlar
realloc Fonksiyonu ayrılmış bellek bloğu boyutu değişir. memblock Bağımsız bellek bloğunun başlangıcına işaret ediyor. memblock Olan NULL, realloc aynı şekilde davranır malloc , yeni bir blok ayırır ve size bayt. memblock Değil NULL, önceki bir çağrı tarafından döndürülen işaretçi olmalıdır calloc, malloc, veya realloc.
size Bağımsız değişkeni yeni blok boyutunu bayt cinsinden verir. Yeni blok farklı bir konumda olabilir, ancak blok içeriği kadar kısa eski ve yeni boyutları değiştirilmez. Yeni blok yeni bir bellek konumunda olduğundan, işaretçiyi döndürülen realloc üzerinden geçirilen işaretçi olmasını garanti edilmez memblock bağımsız değişkeni. reallocsıfır olmayan yeni ayrılan bellek arabelleği büyüme olması halinde yapar.
reallocayarlar errno için ENOMEM bellek ayırma başarısız olursa veya bellek miktarını aşarsa isteniyorsa _HEAP_MAXREQ. Bu ve diğer hata kodları hakkında daha fazla bilgi için bkz: errno, _doserrno, _sys_errlist ve _sys_nerr.
reallocÇağrı mallocC++ kullanmak için _set_new_mode yeni bir işleyici modunu ayarlamak için işlevi. Yeni işleyicisi modu gösterir mi, başarısızlık, malloc tarafından belirlenen yeni işleyici yordamı çağırmak için ise _set_new_handler. Varsayılan olarak, malloc yeni bir işleyici yordamı bellek ayırma hatası çağırmaz. Bu varsayılan davranışı geçersiz kılmak böylece, realloc bellek ayırma işlemi malloc aynı şekilde yeni bir işleyici yordamı çağırır bu yolla new operatörü mü aynı nedenle başarısız olduğunda. Varsayılan geçersiz kılmak için çağrı
_set_new_mode(1)
erken olanları, program veya bağlantı ile newmode.OBJ (see Bağlantı seçenekleri).
Uygulama hata ayıklama sürümü c çalışma zamanı kitaplıkları ile bağlandığında realloc çözümler _realloc_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.
reallocişaretlenmiş __declspec(noalias) ve __declspec(restrict), işlev genel değişkenleri değiştirmek için garantili ve işaretçiyi verdiğini başka ad verilmiş değil. Daha fazla bilgi için bkz: noalias ve kısıtlamak.
Gereksinimler
Yordamı |
Gerekli başlık |
---|---|
realloc |
<stdlib.h> ve <malloc.h> |
Ek uyumluluk bilgileri için bkz: Uyumluluk giriş.
Örnek
// crt_realloc.c
// This program allocates a block of memory for
// buffer and then uses _msize to display the size of that
// block. Next, it uses realloc to expand the amount of
// memory used by buffer and then calls _msize again to
// display the new amount of memory allocated to buffer.
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
int main( void )
{
long *buffer, *oldbuffer;
size_t size;
if( (buffer = (long *)malloc( 1000 * sizeof( long ) )) == NULL )
exit( 1 );
size = _msize( buffer );
printf_s( "Size of block after malloc of 1000 longs: %u\n", size );
// Reallocate and show new size:
oldbuffer = buffer; // save pointer in case realloc fails
if( (buffer = realloc( buffer, size + (1000 * sizeof( long )) ))
== NULL )
{
free( oldbuffer ); // free original block
exit( 1 );
}
size = _msize( buffer );
printf_s( "Size of block after realloc of 1000 more longs: %u\n",
size );
free( buffer );
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.