C ++ realloc () - C ++ Standart Kitaplığı

C ++ içindeki realloc () işlevi, önceden ayrılmış ancak henüz serbest bırakılmamış bir bellek bloğunu yeniden tahsis eder.

Realloc () işlevi, daha önce malloc (), calloc () veya realloc () işlevi kullanılarak tahsis edilen ve henüz free () işlevi kullanılarak serbest bırakılmayan belleği yeniden tahsis eder.

Yeni boyut sıfır ise, döndürülen değer kitaplığın uygulanmasına bağlıdır. Boş gösterici döndürebilir veya dönmeyebilir.

realloc () prototip

 void * realloc (void * ptr, size_t new_size);

İşlev, başlık dosyasında tanımlanır.

realloc () Parametreleri

  • ptr: Yeniden tahsis edilecek bellek bloğuna bir işaretçi.
  • new_size: Bellek bloğunun bayt cinsinden yeni boyutunu temsil eden işaretsiz bir integral değer.

realloc () Dönüş değeri

Realloc () işlevi şunu döndürür:

  • Yeniden tahsis edilen bellek bloğunun başlangıcına bir işaretçi.
  • Tahsis başarısız olursa boş gösterici.

Belleği yeniden tahsis ederken, yeterli bellek yoksa, eski bellek bloğu serbest bırakılmaz ve bir boş gösterici döndürülür.

Eski işaretçi (yani ptr) boşsa, realloc () işlevinin çağrılması, parametresi yeni boyuta sahip malloc () işlevinin çağrılmasıyla aynıdır.

Belleği yeniden tahsis etmenin iki olası yolu vardır.

  1. Aynı bloğun genişletilmesi veya daraltılması : Eski gösterici (yani ptr) tarafından işaret edilen bellek bloğu, mümkünse genişletilir veya daraltılır. Bellek bloğunun içeriği, yeni ve eski boyutlara kadar değişmeden kalır. Alan genişletilirse, yeni tahsis edilen bloğun içeriği tanımsızdır.
  2. Yeni konuma taşınmak : new_size bayt boyutunda yeni bir bellek bloğu tahsis edilir. Bu durumda da, bellek bloğunun içeriği, yeni ve eski boyutlardan daha küçük olana kadar değişmeden kalır ve bellek genişletilirse, yeni tahsis edilen bloğun içeriği tanımsız kalır.

Örnek 1: realloc () işlevi nasıl çalışır?

 #include #include using namespace std; int main() ( float *ptr, *new_ptr; ptr = (float*) malloc(5*sizeof(float)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i*1.5; ) /* reallocating memory */ new_ptr = (float*) realloc(ptr, 10*sizeof(float)); if(new_ptr==NULL) ( cout << "Memory Re-allocation Failed"; exit(1); ) /* Initializing re-allocated memory block */ for (int i=5; i<10; i++) ( new_ptr(i) = i*2.5; ) cout << "Printing Values" << endl; for (int i=0; i<10; i++) ( cout << new_ptr(i) << endl; ) free(new_ptr); return 0; )

Programı çalıştırdığınızda, çıktı:

 Baskı Değerleri 0 1.5 3 4.5 6 12.5 15 17.5 20 22.5

Örnek 2: new_size sıfır ile realloc () işlevi

 #include #include using namespace std; int main() ( int *ptr, *new_ptr; ptr = (int*) malloc(5*sizeof(int)); if(ptr==NULL) ( cout << "Memory Allocation Failed"; exit(1); ) /* Initializing memory block */ for (int i=0; i<5; i++) ( ptr(i) = i; ) /* re-allocating memory with size 0 */ new_ptr = (int*) realloc(ptr, 0); if(new_ptr==NULL) ( cout << "Null Pointer"; ) else ( cout << "Not a Null Pointer"; ) return 0; )

Programı çalıştırdığınızda, çıktı:

 Boş işaretçisi

Örnek 3: ptr NULL olduğunda realloc () işlevi

 #include #include #include using namespace std; int main() ( char *ptr=NULL, *new_ptr; /* reallocating memory, behaves same as malloc(20*sizeof(char)) */ new_ptr = (char*) realloc(ptr, 50*sizeof(char)); strcpy(new_ptr, "Welcome to Programiz.com"); cout << new_ptr; free(new_ptr); return 0; )

Programı çalıştırdığınızda, çıktı:

 Programiz.com'a hoş geldiniz

Ilginç makaleler...