البرمجة

تجنب استخدام delete بدون new

بالطبع، دعنا نلقي نظرة على الشفرة المقدمة ونفهم ما يحدث في كل خطوة.

أولاً، في السطر الأول، نقوم بتعريف متغير من نوع int يسمى “a” ونعطيه القيمة 10.

ثم، في السطر الثاني، نعرف مؤشرًا إلى int يسمى “b” ونضع فيه عنوان متغير “a” باستخدام عامل العنوان (&).

في السطر الثالث، نعرف مؤشر آخر إلى int يسمى “c” ونجعله يشير إلى نفس المكان الذي يشير إليه “b”.

الآن، في السطر الرابع، نستخدم الأمر “delete” لتحرير الذاكرة التي تحتوي عليها المؤشر “b”. وهنا يكمن الخطأ.

عند استخدام “delete”، يجب أن نكون متأكدين من أننا نحرر الذاكرة التي تم تخصيصها باستخدام “new”. في هذه الحالة، لم نستخدم “new” لتخصيص أي ذاكرة. بل قمنا فقط بتعريف متغير int عادي.

بمعنى آخر، نحن لا نحتاج إلى استخدام “delete” في هذه الحالة، ولن يكون له أي تأثير. ولكنه لن يؤدي إلى عدم إمكانية الوصول إلى المتغير “a”، لأنه لم يتم تخصيصه باستخدام “new”.

لذا، بالنسبة لسؤالك، نعم، “delete b” و “delete c” هما متطابقتان في هذه الحالة ولا تؤديان إلى تحرير الذاكرة أو جعل المتغير “a” غير قابل للوصول.

المزيد من المعلومات

بمجرد فهمنا أن استخدام “delete” في هذه الحالة لا يؤدي إلى تحرير الذاكرة أو جعل المتغير “a” غير قابل للوصول، يمكننا النظر في كيفية التعامل مع الذاكرة وتحريرها بشكل صحيح في C++.

عادةً ما يتم استخدام “delete” في C++ لتحرير الذاكرة التي تم تخصيصها باستخدام “new”. على سبيل المثال:

cpp
int* ptr = new int; // allocate memory for an integer // use ptr... delete ptr; // release the memory when done

في هذا المثال، تم تخصيص ذاكرة جديدة باستخدام “new”، وبالتالي يجب علينا استخدام “delete” لتحرير هذه الذاكرة بعد الانتهاء من استخدامها.

ومن المهم أيضًا أن نتذكر أنه عند تحرير الذاكرة باستخدام “delete”، يجب علينا أن نتأكد من عدم استخدام المؤشر بعد ذلك، لأنه سيشير إلى منطقة ذاكرة لم يعد مخصصًا له.

في حالتك، حيث لم يتم استخدام “new” لتخصيص الذاكرة، لا يجب استخدام “delete” على المؤشرات “b” أو “c”، ولن يؤدي استخدامها إلى أي تأثير على المتغير “a”.

لذا، للحفاظ على سلامة التطبيقات وتجنب تسريب الذاكرة أو حدوث أخطاء أخرى، يجب علينا فقط استخدام “delete” عندما نكون متأكدين من أن الذاكرة التي نحن نحررها هي التي تم تخصيصها بواسطة “new”.

مقالات ذات صلة

زر الذهاب إلى الأعلى