تخطَّ إلى المحتوى

🇨 شرح لغة C

إدارة الذاكرة الديناميكية

الدرس 15 من 25· ⏱ 1 دقائق قراءة

لماذا الذاكرة الديناميكية؟

أحيانًا لا نعرف الحجم المطلوب إلا أثناء التشغيل، فنحجز الذاكرة من الكومة (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).

هل كان هذا الدرس مفيدًا؟