C ++ realloc () - Perpustakaan Standard C ++

Fungsi realloc () dalam C ++ mengalokasikan sekatan memori yang sebelumnya diperuntukkan tetapi belum dibebaskan.

Fungsi realloc () menyalurkan semula memori yang sebelumnya dialokasikan menggunakan fungsi malloc (), calloc () atau realloc () dan belum dibebaskan menggunakan fungsi bebas ().

Sekiranya ukuran baru adalah sifar, nilai yang dikembalikan bergantung pada pelaksanaan perpustakaan. Ia mungkin atau tidak akan mengembalikan penunjuk kosong.

realloc () prototaip

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

Fungsi ditentukan dalam fail header.

realloc () Parameter

  • ptr: Penunjuk ke blok memori untuk dialokasikan semula.
  • new_size: Nilai integral yang tidak ditandatangani yang mewakili ukuran baru blok memori dalam bait.

realloc () Nilai pulangan

Fungsi realloc () mengembalikan:

  • Petunjuk ke permulaan blok memori yang diagihkan semula.
  • Penunjuk kosong jika peruntukan gagal.

Semasa mengalokasikan semula memori, jika memori tidak mencukupi, blok memori lama tidak dibebaskan dan penunjuk nol dikembalikan.

Sekiranya penunjuk lama (iaitu ptr) nol, memanggil realloc () sama dengan memanggil malloc () berfungsi dengan ukuran baru sebagai parameternya.

Terdapat dua kemungkinan cara menyusun semula memori.

  1. Memperluas atau menguncup blok yang sama : Blok memori yang ditunjukkan oleh penunjuk lama (iaitu ptr) diluaskan atau dikontrak, jika mungkin. Kandungan blok memori tetap tidak berubah hingga yang lebih kecil dari ukuran baru dan lama. Sekiranya kawasan itu diperluas, kandungan blok yang baru diperuntukkan tidak ditentukan.
  2. Berpindah ke lokasi baru : Blok memori baru ukuran byte new_size diperuntukkan. Dalam kes ini juga, kandungan blok memori tetap tidak berubah hingga yang lebih kecil dari ukuran baru dan lama dan jika memori diluaskan, kandungan blok yang baru diperuntukkan tidak ditentukan.

Contoh 1: Bagaimana fungsi realloc () berfungsi?

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

Semasa anda menjalankan program, outputnya adalah:

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

Contoh 2: fungsi realloc () dengan zero_size baru

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

Semasa anda menjalankan program, outputnya adalah:

 Penunjuk Null

Contoh 3: fungsi realloc () apabila 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; )

Semasa anda menjalankan program, outputnya adalah:

 Selamat Datang ke Programiz.com

Artikel menarik...