Aplikasi Verifier dikombinasikan dengan Alat Debugging untuk Windows adalah pengaturan yang luar biasa. Anda bisa mendapatkan keduanya sebagai bagian dari Kit Pengandar Windows atau Windows SDK yang lebih ringan . (Mengetahui tentang Aplikasi Verifier ketika meneliti pertanyaan sebelumnya tentang masalah korupsi tumpukan .) Saya telah menggunakan BoundsChecker dan Insure ++ (disebutkan dalam jawaban lain) di masa lalu juga, meskipun saya terkejut betapa banyak fungsionalitas dalam Aplikasi Verifier.
Pagar Listrik (alias "efence"), dmalloc , valgrind , dan sebagainya semuanya layak disebutkan, tetapi sebagian besar lebih mudah dijalankan di bawah * nix daripada Windows. Valgrind sangat fleksibel: Saya telah men-debug perangkat lunak server besar dengan banyak masalah tumpukan yang menggunakannya.
Ketika semuanya gagal, Anda dapat memberikan overloads global baru / delete dan malloc / calloc / realloc Anda - cara melakukannya akan sedikit berbeda tergantung pada kompiler dan platform - dan ini akan menjadi investasi yang sedikit - tetapi mungkin terbayar dalam jangka panjang. Daftar fitur yang diinginkan harus terlihat familier dari dmalloc dan electricfence, dan buku yang sangat bagus, Writing Solid Code :
- nilai penjaga : memberikan sedikit lebih banyak ruang sebelum dan setelah setiap alokasi, dengan menghormati persyaratan perataan maksimum; isi dengan angka ajaib (membantu menangkap buffer overflows dan underflow, dan sesekali pointer "liar")
- alokasi isi : isi alokasi baru dengan nilai non-0 ajaib - Visual C ++ sudah akan melakukan ini untuk Anda di Debug build (membantu menangkap penggunaan vars tidak diinisialisasi)
- free fill : isi memori yang dibebaskan dengan nilai non-0 ajaib, yang dirancang untuk memicu segfault jika dalam beberapa kasus dereferenced (membantu menangkap pointer menggantung)
- tertunda gratis : jangan mengembalikan memori yang dibebaskan ke heap untuk sementara waktu, tetap bebaskan isi tetapi tidak tersedia (membantu menangkap lebih banyak petunjuk yang menggantung, menangkap proximate double-frees)
- pelacakan : bisa merekam di mana alokasi dilakukan terkadang dapat bermanfaat
Perhatikan bahwa dalam sistem homebrew lokal kami (untuk target tertanam) kami menjaga pelacakan terpisah dari sebagian besar hal lain, karena overhead run-time jauh lebih tinggi.
Jika Anda tertarik pada lebih banyak alasan untuk membebani fungsi / operator alokasi ini, lihat jawaban saya untuk "Ada alasan untuk membebani operator global yang baru dan hapus?" ; Selain promosi diri yang tak tahu malu, daftar teknik lain yang membantu melacak kesalahan korupsi tumpukan, serta alat-alat lain yang berlaku.
Karena saya terus menemukan jawaban saya sendiri di sini ketika mencari nilai alokasi / gratis / pagar yang digunakan MS, inilah jawaban lain yang mencakup nilai pengisian Microsoft dbgheap .