Bug Memori yang Umum
Hindari kebocoran dan pointer yang menggantung
Bug Memori yang Umum adalah pelajaran C++ Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C++ Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C++ Academy mencakup 4 pelajaran total.
Kebocoran Memori
Kebocoran memori terjadi ketika memori dinamis dialokasikan tetapi tidak pernah dibebaskan. Program terus menggunakan memori yang tidak lagi dapat dijangkaunya.
void leak() {
int* p = new int(5);
// missing delete p; -> leaked
}Pointer Menggantung
Pointer menggantung menunjuk ke memori yang sudah dibebaskan. Melakukan dereferensi terhadapnya merupakan perilaku tak terdefinisi.
int* p = new int(7);
delete p;
// *p = 3; // BUG: dangling accessPembebasan Ganda
Memanggil delete dua kali pada pointer yang sama merusak memori dinamis dan sering membuat program mogok.
int* p = new int(1);
delete p;
// delete p; // BUG: double freePenggunaan Setelah Dibebaskan
Membaca atau menulis melalui pointer setelah objek dihapus merupakan penggunaan setelah dibebaskan—sumber kerentanan keamanan yang umum.
Buffer Meluap
Menulis melewati akhir larik menimpa memori yang tidak terkait. Selalu tetap berada dalam batas.
int a[3] = {1, 2, 3};
// a[3] = 99; // BUG: out of boundsdelete yang Tidak Cocok
Menggunakan delete pada alokasi new[] (atau sebaliknya) merupakan perilaku tak terdefinisi. Selalu pasangkan keduanya.
int* arr = new int[4];
// delete arr; // BUG: should be delete[] arr;
delete[] arr; // correctPointer yang Belum Diinisialisasi
Pointer yang belum diinisialisasi berisi nilai acak. Selalu inisialisasi pointer ke alamat yang valid atau nullptr.
#include <iostream>
int main() {
int* p = nullptr; // safe default
if (!p) std::cout << "not set\n";
}Mengembalikan Alamat Lokal
Mengembalikan alamat variabel lokal pada tumpukan langsung membuat pointer menggantung, karena variabel lokal tersebut mati saat fungsi dikembalikan.
int* bad() {
int x = 10;
return &x; // BUG: x is gone
}Pointer Cerdas Mencegah Kebocoran
Mengganti pemilik mentah dengan std::unique_ptr menghilangkan sebagian besar kebocoran dan pembebasan ganda: pembersihan berlangsung otomatis dan hanya sekali.
#include <iostream>
#include <memory>
int main() {
auto p = std::make_unique<int>(5);
std::cout << *p << "\n";
} // freed exactly once, automaticallyAlat untuk Menangkap Bug
Alat seperti AddressSanitizer dan Valgrind mendeteksi kebocoran, pembebasan ganda, dan akses di luar batas saat program berjalan. Jadikan alat-alat tersebut bagian dari pengujian Anda.
Pencegahan Lebih Baik daripada Deteksi
Perbaikan terbaik adalah menghindari kepemilikan mentah sepenuhnya: gunakan kontainer seperti std::vector dan pointer cerdas agar pustaka mengelola memori dengan benar untuk Anda.
Pemeriksaan Singkat
Uji pemahaman Anda tentang bug memori.
Rangkuman
Anda telah mempelajari bug memori klasik: kebocoran, pointer menggantung, pembebasan ganda, penggunaan setelah dibebaskan, buffer yang meluap, dan delete yang tidak cocok. Cegah bug tersebut dengan pointer cerdas dan kontainer, lalu temukan sisanya dengan sanitizer dan Valgrind.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Bug Memori yang Umum” gratis?
Ya — teks lengkap “Bug Memori yang Umum” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C++ Academy, upgrade ke CoddyKit PRO. Kursus C++ Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Bug Memori yang Umum”?
Hindari kebocoran dan pointer yang menggantung Kamu berlatih C++ Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C++ Academy?
Tidak diperlukan pengalaman sebelumnya. C++ Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Bug Memori yang Umum” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Alokasi Stack
- Alokasi Heap dengan new/delete
- Masa Hidup Objek
- Bug Memori yang Umum