هذا البرنامج أولا يستدعى الدالة اي يات التى تنشئ المتغير :717540 و تجعل :50ت
يشير إليه. ولكن أين توجد المشكلة. عندما تنتهى الدالة من عملها ؛ يتم حذف 1000060/ لأنه متغير
وهذا يعني عندما يرجع التنفيذ من 507127700020077 الى .716077 () ١ يتم حذف المتغير 117547152
المكان فى الذاكرة المشار الية لم يعد يخص برنامجنا الحالى). إذا كنت لا تفهم هذا ؛ قد يكون من الحكمة ان
تراجع على المتغيرات المحلية والعامة ومداها ( 86072 0110 1107105165 210001 0:14 15601) . هذا
المفهوم مهم أيضا.
كيف يمكن حل هذه المشكلة؟ الجواب هو باستخدام تقنية تعرف باسم التخصيص الديناميكي للذاكرة
110007 71271010 77071112:رك. انتبة هذا هو الفرق بين سي و سي + +. ونظرا لأن معظم المطورين
يستخدمون الآن سي + + فأن الكودذ التالى يستخدم تقنيات التخصيص الديناميكى للذاكرة فى السي++.
التخصيص الديناميكى 41/028807 1/1112 0/118[
التخصيص الديناميكي ربما يكون شئ اساسي بالنسبة للمؤشرات. يتم تخصيص الذاكرة دون الحاجة إلى
تعريف متغيرات ثم نجعل المؤشرات تشير الى المكان المخصص ديناميكيا فى الذاكرة. على الرغم من أن
المفهوم قد يبدو مربك؛ فإنه بسيط . الكود التالي يوضح كيفية تخصيص الذاكرة لعدد صحيح :11692:
7 تقد 2 وملام
في السطر الأول نعلن عن المؤشر 078002 السطر الثاني يتم تخصص الذاكرة لعدد صحيح :1114652
ومن ثم نجعل :5:05 يشير لهذا المكان الجديد فى الذاكرة. هنا مثال آخر؛ وهذه المرة باستخدام رقم من
نوع 16[طيادك :
الصيغة هي نفسها في كل مرة و في كتابتها. لجرك اماد فى التخصيص الديناميكي فط
التنفيذ من كتلة الكود الحالي لذا لو إعادنا كتابة المثال أعلاه باستخدام التخصيص الديناميكي للذاكرة ؛ يمكننا
أن نرى أنه يعمل بشكل جيد الآن :
+ يشير الى منطقة ذاكرة جديد من الحجم م001048م //
معد 2 بعأصاو0طم
تتفي الدالة و 00/0468 يشير الى مكان الذاكرة المنلسب // :501716100641000
من خلال قراءة وا المثال السابق. تأكد من فهمك لماذا يعمل؟ . عندما يتم استدعاء الدالة
تنفيذ كود الدالة؛ يتم ترك الذاكرة الجديدة بدون حذفء لذلك :702/7 لا يزال يشير إلى نفس المكان فى
الذاكرة رغم انتهاء عمل الدالة. وهذا ما يسمى التخصيص لديناميكى للذاكرة! . واصل القراءة لمعرفة لماذا
الرغم من ان الذاكرة التي حجزتها باستخدام التخصيص الديناميكي تظل سليمة بدون وفى الواقع لن
بحاجة الى هذة الذاكرة فللأسف ستضيع عليك فرصة استخدامها فى البرامج الاخرى. واذا تكرر ذلك سوف
ايودى فى نهاية المطاف الى توقف النظام عن العمل نتيجة نفاذ الذاكرة فأحذر هذة النقطة مهمة جدا. ان
خطير ويمكن أن يؤّدي توقف البرنامج عن العمل.
معد 2 بعأصاوطم
تم تحرير مكان لذاكرة بعد الانتهاء من استخدامها // :]0001046 061666
الفرق سطر واحد من الكود البرمجى ولكنة فرق جوهرى . لو انك لم تحرر الذاكرة فأنة سوف يحدث ما
يسمى "1601 :006107" تسرب الذاكرة . وعندما يتم تسرب الذاكرة تدريجيا فلن يتم استخدامها الا اذا أغلق
تمرير المؤشرات الى الدوال.
:5 + بعوطصصسلا - بعطصصيلا
للأسف ان المشكلة فى 17,0527 وسيط الدالة 10077706رهو نسخة من المتغير 17111428001567 تم
تمريرها الى الدالة وليس المتغير نفسة. ولذلك فأن سطر الكود: 5 + 1800068 - 18000027 يضيف القيمة
5 الى نسخة من المتغير وذلك بدون تغيير المتغير الذى فى الدالة الرئيسية بأى شئ. حاول تشغيل البرنامج
حتى تتأكد من ذلك
لكى نحل هذة المشكلة يمكننا تمرير مؤشر حيث يوجد الرقم بالذاكرة الى الدالة؛ ولكن يجب علينا تعديل الدالة
لكى تفهم اننا نريد مؤشر الى الرقم وليس نسخة الرقم نه ّ 44972/ 11010
28000567) الى 20701567 *0718) 44077716 0014) وتلاحظ اضافة النجمة فقط. التالى البرنامج بعد عمل
علامة .8 التى تقراً على انها عنوان المتغير :1114:154::162.
(ةطصصيلا *1)عباز عام الأول
نل /إ8:01/1) 6 بازع ادام
حاول عمل مثال خاص بك لإثبات ذلك. لاحظ اهمية أضافة ال * قبل :1800:02 فى الدالة 4407002
.ب المترجم يكنا يد أن نط ف القيمة 5 الى الرقم المشار الية بواسطة المتغير 16000567 بدلا من
7م برجا * لطا
فى هذا المثال ان الدالة 14070006870 ترجع مؤشر الى قيمة من نوع 111
تذكر ان : من خلال دراستك للدول تعلمت ان الدالة يمكن ان ترجع قيمة فلا تستغرب عندما تعرف ان الدالة
ترجع مؤشر ايضا.
هناك عددا من الأمور ينبغي الانتباه اليها مع مؤشرات؛ ومنها مع الفئات. يمكن تعريف فئة كما يلي :
685 لاا 5فقاء
ثم يمكنك تعريف متغير من نوع 14(:01085 على النحو التالي :
يجب عليك ان تعرف هذا مسبقا. لما لا؟ من خلال قراءتك لهذا المقال. لتعريف مؤشر إلى 1:01055 يمكن
عمل :
كما تتوقع. ثم يجب عليك تخصيص حجم مناسب من الذاكرة وهذا المؤشر يشير الى الذاكرة المخصصة.
هذا هو مكان وجود المشكلة : كيف نستخدم هذا المؤشر مع الفئات؟ رائع ربما تريد ان تكتب ال
ل ل ولكن لن تستطيع ذلك مع المؤشرات لان 817:5 ليس ال 4(:01088/( نفسها ولكن
شر اليها. لذا 2:05 نفسة لا يحتوى على متغير يسمى 8:_47:027 انما يشيرالى هيكل بيانات يحتوى
5 07_16 لذا يجب علينا استخدام شئ مختلف حتى نصل الى عناصر الفئة . وهو استبدال (.)
النقطة ب -> . المثال يوضح ذلك:
0185لا 5فقاء
87 0_8 نقتا
التخصيص الديناميكى للذاكرة كما يلي:
ر([ الاهوة 1ل < بيدعظم
ِ تل ,61/08 471 14] د 4777 . طبعا هذا ينطبق على ال نتيجة من طريقة
الح يل 4 سي واسي +ه. الخطأً الشائع هواكتابة 6 رمال - :(76بامع: ولكن هذا
استخدام المؤشرات مع المصفوفات
المثل التالى:
لات تنم * أ
لإ ظيرانا بينظم ار // :[0]لرقحقة - لاقعظم
ا و ا لا يجب عليك اطلاقا تجاوز حدود ل
المطاف قد تتسب فى توقف نظام التشغيل. والمثل التالى يعرض الثلاثة قيم للمصفوفة:
لات تنم * أ
:]انق ليقعظم
++ ريع عظرم
:يهنم * ,"مك96 علوي 68 م كخصادم ليه عظلم ")مام
تساوي ال *(1 + 013171102:7352).
وكلمة اخير عن التحذير من المصفوفات المخصص لها ذاكرة عن طريق 120/ كما فى المثال:
:]1 معد بيهمظم
يجب حذف هذة الذاكرة الديناميكية كالتالي:
لاحظ [] بعد 261286 هذا يخبر ويطلب من المترجم حذف كل المصفوفة بكل عناصرها وليس عنصر معين
منها. يجب عليك استخدام ذلك فى كل وقت تستخدم المصفوفات بهذة الطريقة والا انت تعرف سيحدث ما
يسمى بتسرب الذاكرة +1664 871601017
المراجع 1816/6665
لقد وصلت لى استفسارات كثيرة عن المراجع خلال اطلاع القراء على هذة المقالة ولكن سوف اطرحها فى
عنوان ال "الا فى حالة الاعلان عن المؤشر. في حالة وجودها في الاعلان عن المتغير مثل تلك المبينة
المراجع مثل مؤشر الى 7:700277:0567 ما عدا انة يتم تغيير مرجعيتها اليا ( يقصد لست بحاجة الى
وضع علامة النجمة امام المؤشر لكى تتمكن من تغير قيمة المتغير) لذا انت تتعامل مع المرجع كما لو كان
متغير عادى بدلا من المؤشر . والكود الذى يؤدى نفس وظيفة الكود السابق ولكن بالمؤشرات:
00/018006 2 بعطصصسلام “10
الفروق الاخرى بين المؤشرات والمراجع هوانة لا يمكنك اعادة ضبط القيمة التى هو مرجع لها. بشكل اخر
:7 بعطدصسلااك 566010 لاد أ0اأ
:ددن ل156 لات ,"0 96 ")101011
وعند يكون فى الفئات . ان قيمة المرجع يجب ان يتم اعدادها فى بانى 01158:1:2407م الفئة بالطريقة التالية:
دليل المبتدئين فى المؤشرات 10
كلمة اخيرة
ملاحظة أخيرة : يجب عدم حذف الذاكرة التي لم يتم تخصيصها بأستخدام 112:0 مثال :
.7 لم يتم تخصيص الذاكرة له بأستخدام بع طدديالاام* -خطاً // زنع ملام 061666
َ فلذ نؤكد على استخدام الامتداد درن لملف الكود الخاص بك حتى
اس: ما هو الفرق بين 120 وي 0181196 ؟
انت لا عليك اطلاقا استخدام 81106 بداخل برامج سي++ الا فى حالة الضرورة القصوى.
الذاكرة للفئات هذا سيمنع استدعاء بانى الفئة. هذا مثال واحد على المشاكل التى يمكن ان تحدث. وكنتيجٍ
للمشاكل التى تسببها 7101102 و 768 ولان لهما استخدام محدود. لم يتم مناقشتهم بتفصيل فى هذا المقال.
اقترح عليك تجنب استخدامها بقدر المستطاع.
س: هل يمكننى استخدام بترو و4121 معا ؟
© : يجب عليك تحرير الذاكرة التى سبق ان قمت بتخصيصها بالطريقة المناسبة. على سبيل المثل:
يجب عليك ان تتذكر ان هذا المقال صعب فهمة بشكل كامل من المرة الاولى. لذا من المناسب قراءة على
1. المؤشرات هى متغيرات تشير الى مكان محدد فى الذاكرة. يمكنك تعريف المؤشر بأضافة النجمة(*)
قبل اسم المتغير مثل (-(00100(01059 112).
2. يمكنك الحصول على عنوان اى متغير بأضافة علامة .8 قبل اسم المتغير. مثل
دليل المبتدئبن فى المؤشرات 11