Kebocoran Memori
Pelajaran 12 dari 14 dalam kursus Pointer C++ di Coddy.
Pada pelajaran sebelumnya, kita menggunakan kata kunci delete karena sangat penting untuk membebaskan memori yang telah kamu alokasikan. Sekarang, kita akan mempelajarinya lebih detail.
Kebocoran memori terjadi ketika program mengalokasikan memori dari heap, tetapi gagal membebaskannya setelah tidak lagi diperlukan.
Pada dasarnya, saat kita menjalankan program, kita mengalokasikan memori yang diperlukan, lalu melupakannya dan memori itu tidak pernah dibebaskan atau dihapus. Perhatikan contoh berikut:
int *p, *q; // Deklarasi
p = new int; // Alokasi memori
q = new int; // Alokasi memori
*p = 10; // Pemberian nilai
*q = 20; // Pemberian nilai
cout << *p << " " << *q << endl;
q = p; // q dan p menunjuk ke lokasi yang sama
// Lokasi awal q HILANG
cout << *p << " " << *q << endl;
delete p;
delete q;Output:
10 20
10 10Pertama, kita mendeklarasikan pointer, mengalokasikan memori untuk masing-masing satu bilangan bulat, lalu menetapkan nilai pada alamat-alamat tersebut. Seperti yang kamu lihat, kita dapat mencetak nilainya dengan cout pertama.
Hal menarik terjadi pada baris <i>q = p</i>. Kita mengatur pointer <i>q</i> agar menunjuk ke lokasi yang sama dengan yang ditunjuk oleh <i>p</i>. Akibatnya, lokasi awal yang kita alokasikan untuk ditunjuk oleh <i>q</i> akan hilang secara permanen dan tidak dapat lagi diakses atau dihapus.
Seperti yang kamu lihat pada baris berikutnya, kita mencetak lagi pointer yang telah didereferensikan dan mendapatkan nilai yang sama karena keduanya menunjuk ke lokasi yang sama.
Itulah sebabnya mengapa sangat penting untuk mewaspadai kebocoran memori dan mengelola data yang dialokasikan secara dinamis.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Tantangan
MudahTulis program yang sama seperti pada pelajaran sebelumnya, tetapi kali ini dealokasikan semua memori yang dialokasikan menggunakan kata kunci delete. Alokasikan memori secara dinamis untuk tiga bilangan bulat menggunakan pointer ptrA, ptrB, dan ptrC. Gunakan tiga bilangan bulat yang diberikan sebagai argumen fungsi, lalu tetapkan nilai pada alamat pointer agar masing-masing sama dengan bilangan bulat tersebut. Bilangan bulat pertama untuk ptrA, bilangan bulat kedua untuk ptrB, dan bilangan bulat terakhir untuk ptrC, lalu cetak semua pointer yang sudah di-dereference dan pisahkan dengan spasi
JANGAN tulis fungsi <i>main()</i>
Coba sendiri
#include <iostream>
using namespace std;
void dynamicMemory(int a, int b, int c) {
// Masukkan kodemu di sini
// Bebaskan memori
}
// Jangan tulis fungsi main()Semua pelajaran di Pointer C++
3Alokasi Memori Dinamis
Operator new & deleteKebocoran Memoriarray DinamisPenyisipan pada array DinamisLatihan sendiri: Compiler C++ online