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