المؤشرات الفارغة (Null Pointers)
جزء من قسم المنطق وتدفق التنفيذ في رحلة C++ على Coddy. الدرس 4 من 56.
عندما تعلن عن pointer، فإنه لا يشير تلقائيًا إلى أي شيء ذي معنى. يحتوي pointer غير المهيأ على عناوين ذاكرة عشوائية، مما قد يؤدي إلى أخطاء خطيرة إذا حاولت استخدامه. وهنا تصبح المؤشرات null ضرورية للبرمجة الآمنة.
إن null pointer هو pointer يشير صراحةً إلى لا شيء. في لغة C++ الحديثة، تنشئ null pointer بتهيئته باستخدام nullptr:
int* ptr = nullptr; // ptr أصبح الآن مؤشرًا فارغًاتشير الكلمة المفتاحية nullptr إلى أن pointer لا يشير إلى أي موقع ذاكرة valid. وهذا أكثر أمانًا بكثير من ترك pointer غير مُهيأ، لأنه يمكنك التحقق مما إذا كان pointer يساوي null قبل محاولة dereference له.
قبل استخدام أي pointer، يجب عليك التحقق من أنه ليس null باستخدام عبارة if بسيطة:
if (ptr != nullptr) {
// من الآمن استخدام *ptr هنا
int value = *ptr;
}تمنع هذه الممارسة برنامجك من التعطل بسبب الوصول إلى مواقع ذاكرة غير صالحة. احرص دائمًا على تهيئة pointer إلى nullptr عند إعلانها، وتحقق من null قبل إجراء dereference.
التحدي
سهلأنشئ برنامجًا يوضّح الاستخدام الآمن لـ pointer من خلال التحقق من وجود مؤشرات null قبل إلغاء الإشارة إليها.
سيتم توفير input التالي:
- string ستكون إما
"valid"أو"null"
يجب أن يقوم برنامجك بما يلي:
- Declare متغيرًا صحيحًا باسم
dataوتهيئته بالقيمة42 - Declare pointer باسم
ptr - إذا كانت input هي
"valid"، فقم بـ assign عنوانdataإلىptr - إذا كانت input هي
"null"، فقم بـ assignnullptrإلىptr - استخدم if-statement للتحقق من أن
ptrليست null قبل محاولة استخدامها - إذا لم تكن pointer هي null، فاطبع القيمة التي تشير إليها
- إذا كانت pointer هي null، فاطبع رسالة أمان
استخدم تنسيق الإخراج الدقيق التالي:
Value: [value]بالنسبة إلى مؤشرات null، استخدم هذا التنسيق:
Pointer is null - cannot dereferenceجرّب بنفسك
#include <iostream>
#include <string>
using namespace std;
int main() {
// اقرأ الإدخال
string input;
cin >> input;
// أعلن عن متغير data
int data = 42;
// TODO: اكتب شفرتك هنا
// - أعلن عن مؤشر باسم ptr
// - تحقق من الإدخال وعيّن القيمة المناسبة إلى ptr
// - استخدم if-statement للتحقق بأمان واستخدام المؤشر
return 0;
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
1المؤشرات والذاكرة
ما هو المؤشر؟معامل العنوان (Address-Of)معامل الوصول للقيمة (Dereference)المؤشرات الفارغة (Null Pointers)المؤشرات والمصفوفاتالذاكرة الديناميكية باستخدام 'new'تحرير الذاكرة باستخدام 'delete'مراجعة - تمارين على المؤشرات2المتجهات (المصفوفات الديناميكية)
مقدمة إلى std::vectorإنشاء Vectorإضافة العناصرالوصول إلى العناصرحجم الـ Vectorالتكرار باستخدام For Loopالـ Range-Based For Loopإزالة العناصرملخص - عمليات الـ Vectorتدرّب بنفسك: مترجم C++ عبر الإنترنت