Mengubah ukuran memori yang sudah dialokasikan dalam C
Fungsi realloc() digunakan untuk mengubah ukuran blok memori yang telah dialokasikan sebelumnya dengan malloc() atau calloc().
Jika ukuran baru lebih besar, maka blok baru bisa dialokasikan, dan data lama tetap dipertahankan.
Sintaks
void *realloc(void *ptr, size_t new_size);
ptr ➜ Pointer ke blok memori yang sebelumnya dialokasikan dengan malloc() atau calloc().
new_size ➜ Ukuran baru (dalam byte) yang ingin dialokasikan.
Mengembalikan pointer ke blok memori yang telah diperbesar/diperkecil.
Jika gagal, mengembalikan NULL, tetapi memori lama tetap ada.
Contoh Penggunaan
1. Menambah ukuran array dinamis
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n = 3;
// Alokasi awal untuk 3 elemen
arr = (int*) malloc(n * sizeof(int));
if (arr == NULL) {
printf("Alokasi awal gagal!\n");
return 1;
}
// Mengisi nilai awal
for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}
// Menampilkan array sebelum realloc
printf("Array sebelum realloc: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// Menambah ukuran array menjadi 5 elemen
n = 5;
arr = (int*) realloc(arr, n * sizeof(int));
if (arr == NULL) {
printf("realloc gagal!\n");
return 1;
}
// Mengisi elemen tambahan
for (int i = 3; i < n; i++) {
arr[i] = i + 1;
}
// Menampilkan array setelah realloc
printf("Array setelah realloc: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr); // Bebaskan memori
return 0;
}
Hasilnya:
Array sebelum realloc: 1 2 3
Array setelah realloc: 1 2 3 4 5