C ++ realloc () - C ++ Standard Library

Fungsi realloc () di C ++ mengalokasikan ulang blok memori yang sebelumnya dialokasikan tetapi belum dibebaskan.

Fungsi realloc () mengalokasikan kembali memori yang sebelumnya dialokasikan menggunakan fungsi malloc (), calloc () atau realloc () dan belum dibebaskan menggunakan fungsi free ().

Jika ukuran baru adalah nol, nilai yang dikembalikan bergantung pada implementasi pustaka. Ini mungkin atau mungkin tidak mengembalikan pointer nol.

prototipe realloc ()

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

Fungsi tersebut didefinisikan dalam file header.

realloc () Parameter

  • ptr: Sebuah pointer ke blok memori yang akan dialokasikan kembali.
  • new_size: Nilai integral unsigned yang mewakili ukuran baru blok memori dalam byte.

realloc () Nilai kembali

Fungsi realloc () mengembalikan:

  • Penunjuk ke awal blok memori yang dialokasikan ulang.
  • Pointer nol jika alokasi gagal.

Saat mengalokasikan kembali memori, jika tidak ada cukup memori, maka blok memori lama tidak dibebaskan dan pointer nol dikembalikan.

Jika pointer lama (misalnya ptr) adalah null, memanggil realloc () sama dengan memanggil fungsi malloc () dengan ukuran baru sebagai parameternya.

Ada dua cara yang mungkin untuk mengalokasikan kembali memori.

  1. Memperluas atau mengontrak blok yang sama : Blok memori yang ditunjukkan oleh penunjuk lama (yaitu ptr) diperluas atau dikontrak, jika memungkinkan. Isi blok memori tetap tidak berubah hingga ke ukuran yang lebih kecil dari yang baru dan yang lama. Jika area diperluas, konten blok yang baru dialokasikan tidak ditentukan.
  2. Pindah ke lokasi baru : Sebuah blok memori baru berukuran byte_size baru dialokasikan. Dalam kasus ini juga, konten blok memori tetap tidak berubah hingga yang lebih kecil dari ukuran baru dan yang lama dan jika memori diperluas, konten blok yang baru dialokasikan tidak ditentukan.

Contoh 1: Bagaimana fungsi realloc () bekerja?

 #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; )

Saat Anda menjalankan program, hasilnya adalah:

 Nilai Pencetakan 0 1.5 3 4.5 6 12.5 15 17.5 20 22.5

Contoh 2: fungsi realloc () dengan new_size nol

 #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; )

Saat Anda menjalankan program, hasilnya adalah:

 Pointer Null

Contoh 3: fungsi realloc () ketika ptr adalah NULL

 #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; )

Saat Anda menjalankan program, hasilnya adalah:

 Selamat datang di Programiz.com

Artikel yang menarik...