الدرس 24: أمان الذاكرة — التسريبات والمؤشرات المعلّقة (dangling pointers)
تعلّمنا كيف نطلب الذاكرة — والآن نتعلّم كيف لا نتأذّى منها. يحدث تسريب الذاكرة عندما تفقد المؤشر الأخير إلى كتلة دون تحريرها، مثلاً بإسناد عنوان جديد إلى p قبل free. إن double free سلوك غير معرّف، واستخدام مؤشر بعد free — أي مؤشر معلّق (dangling) — خطير بالقدر نفسه. العادات الدفاعية: مباشرة بعد free
تخيّل مفاتيح خزائن التخزين: التسريب هو أن تفقد المفتاح الوحيد لخزانة ممتلئة — تبقى الخزانة مشغولة إلى الأبد. و double free هو أن تحاول إعادة المفتاح نفسه مرتين — فيُصاب موظّف الاستقبال بالذعر. والمؤشر المعلّق (dangling) هو أن تستخدم نسخة من مفتاح خزانة سبق أن أعدتها — من يدري ماذا (أو من) بداخلها الآن.
- تسريب ذاكرة
- فقدان المؤشر الأخير إلى كتلة مخصّصة دون استدعاء free — تبقى الذاكرة مشغولة دون أيّ سبيل لتحريرها.
- تحرير مزدوج (double free)
- استدعاء free مرتين على الكتلة نفسها. سلوك غير معرّف — انهيار أو إفساد للذاكرة.
- مؤشر معلّق (dangling)
- مؤشر ما زال يحمل عنوان كتلة مُحرَّرة. استخدامه (use-after-free) سلوك غير معرّف.
- الملكية (ownership)
- العقلية الدفاعية: لكل كتلة 'مالك' واحد مسؤول عن تحريرها — مرة واحدة بالضبط. اسأل دائماً 'من المسؤول عن تحرير هذه الكتلة؟'.
- valgrind
- أداة تشغّل برنامجك وتكتشف التسريبات وأخطاء الذاكرة: valgrind ./prog.