Saya membuat larik char seperti ini:
char arr[3] = "bo";
Bagaimana cara membebaskan memori yang terkait dengan larik yang saya beri nama "arr"?
Variabel lokal secara otomatis dibebaskan ketika fungsi berakhir, Anda tidak perlu membebaskannya sendiri. Anda hanya membebaskan memori yang dialokasikan secara dinamis (misalnya menggunakan malloc
) karena dialokasikan di heap:
char *arr = malloc(3 * sizeof(char));
strcpy(arr, "bo");
// ...
free(arr);
Lebih lanjut tentang alokasi memori dinamis: http://en.wikipedia.org/wiki/C_dynamic_memory_allocation
Anda tidak membebaskan apa pun sama sekali. Karena Anda tidak pernah memperoleh sumber daya apa pun secara dinamis, maka tidak ada yang harus Anda bebaskan, atau bahkan tidak diizinkan untuk membebaskannya.
(Ini sama seperti ketika Anda mengatakan int n = 10;
: Tidak ada sumber daya dinamis yang terlibat yang harus Anda kelola secara manual).
Memori yang diasosiasikan dengan arr
dibebaskan secara otomatis ketika arr
keluar dari ruang lingkup. Ini adalah variabel lokal, atau dialokasikan secara statis, tetapi tidak dialokasikan secara dinamis.
Aturan sederhana yang harus Anda ikuti adalah bahwa Anda hanya boleh memanggil free()
pada pointer yang dikembalikan oleh panggilan ke malloc
, calloc
atau realloc
.