Membebaskan Memori dengan 'delete'
Termasuk bagian Logika dan Alur dalam perjalanan C++ di Coddy. Pelajaran 7 dari 56.
Saat kamu mengalokasikan memori secara dinamis menggunakan new, memori itu tidak otomatis hilang setelah selesai kamu gunakan. Tidak seperti variabel biasa yang dibersihkan secara otomatis, memori yang dialokasikan secara dinamis tetap digunakan sampai kamu membebaskannya secara eksplisit. Di sinilah kata kunci delete menjadi penting.
Kata kunci delete membebaskan memori yang sebelumnya dialokasikan dengan new. Saat kamu menggunakan delete, kamu memberi tahu sistem bahwa kamu sudah selesai menggunakan memori tersebut dan memori itu dapat digunakan kembali untuk keperluan lain:
int* ptr = new int(42); // Alokasikan memori
// Gunakan memori tersebut...
delete ptr; // Bebaskan memoriAturan dasar pengelolaan memori dinamis sederhana: setiap new harus memiliki delete yang sesuai. Jika kamu lupa menghapus memori yang dialokasikan secara dinamis, kamu akan menyebabkan kebocoran memori, yaitu programmu terus menahan memori yang tidak lagi digunakan, yang pada akhirnya dapat menyebabkan sistemmu kehabisan memori yang tersedia.
Setelah memanggil delete pada sebuah pointer, pointer tersebut menjadi tidak valid dan tidak boleh digunakan lagi. Sebaiknya atur pointer ke nullptr setelah menghapusnya agar kamu tidak menggunakannya secara tidak sengaja.
Tantangan
MudahBuat program yang menunjukkan seluruh siklus hidup memori dinamis dengan mengalokasikan memori menggunakan new, menggunakannya, lalu membatalkan alokasinya dengan benar menggunakan delete.
Input berikut akan diberikan:
- Nilai bilangan bulat untuk disimpan di memori yang dialokasikan secara dinamis
- Nilai bilangan bulat kedua untuk memperbarui nilai yang disimpan
Programmu harus:
- Menggunakan
newuntuk mengalokasikan memori secara dinamis bagi sebuah bilangan bulat dan menyimpan pointer-nya dalam variabel bernamadynamicPtr - Menetapkan nilai input pertama ke memori yang dialokasikan secara dinamis menggunakan operator dereferensi
- Mencetak nilai awal yang disimpan di memori yang dialokasikan secara dinamis
- Memperbarui nilai di memori yang dialokasikan secara dinamis menjadi nilai input kedua
- Mencetak nilai yang telah diperbarui
- Menggunakan
deleteuntuk membebaskan memori yang dialokasikan secara dinamis - Mengatur pointer menjadi
nullptrsetelah penghapusan - Mencetak pesan konfirmasi bahwa memori telah dibebaskan
Gunakan format output persis seperti berikut:
Initial value: [first value]
Updated value: [second value]
Memory freed successfullyCoba sendiri
#include <iostream>
using namespace std;
int main() {
// Baca nilai input
int firstValue, secondValue;
cin >> firstValue;
cin >> secondValue;
// TODO: Tulis kodemu di bawah ini
// 1. Alokasikan memori menggunakan new dan simpan alamatnya di dynamicPtr
// 2. Masukkan firstValue ke memori yang dialokasikan
// 3. Cetak nilai awal
// 4. Perbarui nilainya dengan secondValue
// 5. Cetak nilai yang sudah diperbarui
// 6. Hapus memori dan atur pointer ke nullptr
// 7. Cetak pesan konfirmasi
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Pointer dan Memori
Apa Itu Pointer?Operator Address-OfOperator DereferencePointer NullPointer dan ArrayMemori Dinamis dengan 'new'Membebaskan Memori dengan 'delete'Rangkuman: Latihan Pointer2Vektor (array Dinamis)
Memperkenalkan std::vectorMembuat VektorMenambahkan ElemenMengakses ElemenUkuran VektorIterasi dengan for loopFor loop Berbasis RentangMenghapus ElemenRangkuman: Operasi VektorLatihan sendiri: Compiler C++ online