Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الذاكرة الديناميكية باستخدام 'new'

جزء من قسم Logic & Flow في رحلة C++ على Coddy — الدرس 6 من 56.

حتى الآن، تعاملت مع المؤشرات التي تشير إلى متغيرات تم إنشاؤها بالفعل في برنامجك. ولكن ماذا لو كنت بحاجة إلى إنشاء متغيرات أثناء تشغيل برنامجك؟ هنا يصبح تخصيص الذاكرة الديناميكي باستخدام الكلمة المفتاحية new أمراً ضرورياً.

تتيح لك الكلمة المفتاحية new تخصيص ذاكرة لمتغير على الكومة (heap) أثناء تنفيذ البرنامج. وعلى عكس المتغيرات العادية التي يتم إنشاؤها على المكدس (stack)، فإن الذاكرة المخصصة ديناميكيًا تستمر حتى تقوم بتحريرها صراحةً.

int* ptr = new int;  // يخصص ذاكرة لعدد صحيح
*ptr = 42;           // يسند قيمة للذاكرة المخصصة

في هذا المثال، يقوم new int بتخصيص ذاكرة كافية لتخزين عدد صحيح ويعيد مؤشراً إلى موقع الذاكرة هذا. يمكنك بعد ذلك استخدام عامل إلغاء المرجعية (dereference operator) لتعيين القيم والوصول إلى المتغير المخصص ديناميكياً تماماً مثل أي مؤشر آخر.

تخصيص الذاكرة الديناميكي مفيد بشكل خاص عندما لا تعرف مقدار الذاكرة التي ستحتاجها حتى وقت التشغيل، أو عندما تحتاج إلى بقاء المتغيرات خارج النطاق الذي تم إنشاؤها فيه. هذه المرونة تجعل new أداة قوية لبناء برامج أكثر تعقيداً.

challenge icon

التحدي

سهل

قم بإنشاء برنامج يوضح تخصيص الذاكرة الديناميكي باستخدام الكلمة المفتاحية new لتخصيص ذاكرة لمتغير أثناء تنفيذ البرنامج.

سيتم توفير المدخلات التالية:

  • قيمة صحيحة (integer) لتخزينها في الذاكرة المخصصة ديناميكيًا

يجب على برنامجك القيام بما يلي:

  1. استخدام الكلمة المفتاحية new لتخصيص ذاكرة ديناميكيًا لعدد صحيح
  2. تخزين المؤشر (pointer) الذي تم إرجاعه بواسطة new في متغير مؤشر يسمى numPtr
  3. استخدام عامل إلغاء المرجعية (dereference operator) لتعيين القيمة المدخلة إلى الذاكرة المخصصة ديناميكيًا
  4. طباعة القيمة المخزنة في الذاكرة المخصصة ديناميكيًا عن طريق إلغاء مرجعية المؤشر
  5. طباعة عنوان الذاكرة المخزن في المؤشر

استخدم تنسيق المخرجات الدقيق التالي:

Value: [value]
Address: [memory address]

سيتم عرض عنوان الذاكرة بتنسيق سداسي عشري (hexadecimal)، وهو الطريقة التي تعرض بها لغة C++ عناوين الذاكرة للذاكرة المخصصة ديناميكيًا.

ورقة مرجعية

تقوم الكلمة المفتاحية new بتخصيص ذاكرة لمتغير في الذاكرة الكومة (heap) أثناء تنفيذ البرنامج:

int* ptr = new int;  // يخصص ذاكرة لعدد صحيح
*ptr = 42;           // يسند قيمة للذاكرة المخصصة

على عكس المتغيرات العادية التي يتم إنشاؤها في الذاكرة المكدسة (stack)، تستمر الذاكرة المخصصة ديناميكيًا حتى يتم تحريرها صراحةً ويمكن أن تظل موجودة خارج النطاق الذي أُنشئت فيه.

جرّب بنفسك

#include <iostream>
using namespace std;

int main() {
    // قراءة المدخلات
    int value;
    cin >> value;
    
    // TODO: اكتب الكود الخاص بك أدناه
    // استخدم 'new' لتخصيص الذاكرة ديناميكيًا لعدد صحيح
    // قم بتخزين المؤشر في متغير باسم 'numPtr'
    // قم بتعيين قيمة المدخلات إلى الذاكرة المخصصة ديناميكيًا
    
    // إخراج النتيجة
    cout << "Value: " << /* قم بإلغاء مرجع numPtr هنا */ << endl;
    cout << "Address: " << /* اطبع العنوان المخزن في numPtr */ << endl;
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow