لماذا الذاكرة الديناميكية؟
أحيانًا لا نعرف الحجم المطلوب إلا أثناء التشغيل، فنحجز الذاكرة من الكومة (heap):
#include <stdlib.h>
int *arr = malloc(5 * sizeof(int)); // حجز مكان لـ 5 أعداد
if (arr == NULL) { /* فشل الحجز */ }
for (int i = 0; i < 5; i++) arr[i] = i;
free(arr); // تحرير الذاكرة عند الانتهاء
arr = NULL; // تجنّب المؤشّر المعلّق
calloc و realloc
int *a = calloc(5, sizeof(int)); // مثل malloc لكن يصفّر القيم
a = realloc(a, 10 * sizeof(int)); // تغيير الحجم لاحقًا
قاعدة ذهبية
كل
malloc(أوcalloc) يقابلهfreeواحد. نسيانfree= تسرّب ذاكرة (memory leak)، واستخدام الذاكرة بعدfree= خطأ خطير.
أخطاء شائعة
- التحرير المزدوج (
freeمرّتين) لنفس المؤشّر. - استخدام الذاكرة بعد تحريرها.
🎯 التالي: الهياكل (Structures).