Menu
Coddy logo textTech

מצביעי Null

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 4 מתוך 56.

כשמכריזים על מצביע, הוא לא מצביע באופן אוטומטי על שום דבר בעל משמעות. מצביע שלא אותחל מכיל כתובות זיכרון אקראיות, והדבר עלול לגרום לשגיאות חמורות אם מנסים להשתמש בו. כאן מצביעי null הופכים לחיוניים לתכנות בטוח.

מצביע null הוא מצביע שמצביע במפורש לשום דבר. ב-C++ מודרנית, יוצרים מצביע null על ידי אתחול שלו באמצעות nullptr:

int* ptr = nullptr;  // ptr הוא כעת מצביע null

מילת המפתח nullptr מציינת שהמצביע אינו מצביע על מיקום זיכרון תקין כלשהו. זה בטוח הרבה יותר מהשארת מצביע ללא אתחול, מכיוון שניתן לבדוק אם המצביע הוא null לפני שמנסים לבצע לו dereference.

לפני השימוש במצביע כלשהו, עליך לוודא שהוא אינו null באמצעות משפט if פשוט:

if (ptr != nullptr) {
    // בטוח להשתמש כאן ב-*ptr
    int value = *ptr;
}

תרגול זה מונע מהתוכנית שלך לקרוס עקב גישה למיקומי זיכרון לא תקינים. אתחל תמיד מצביעים ל-nullptr כשאתה מצהיר עליהם, ובדוק שהם אינם null לפני ביצוע הפניה דרך המצביע.

challenge icon

אתגר

קל

צרו תוכנית שמדגימה שימוש בטוח במצביעים באמצעות בדיקה שהמצביעים אינם null לפני ביצוע פעולת dereference שלהם.

הקלט הבא יינתן:

  • מחרוזת שתהיה "valid" או "null"

על התוכנית שלכם:

  1. להכריז על משתנה שלם בשם data ולאתחל אותו לערך 42
  2. להכריז על מצביע בשם ptr
  3. אם הקלט הוא "valid", להקצות ל-ptr את הכתובת של data
  4. אם הקלט הוא "null", להקצות ל-ptr את nullptr
  5. להשתמש במשפט if כדי לבדוק ש-ptr אינו null לפני שמנסים להשתמש בו
  6. אם המצביע אינו null, להדפיס את הערך שאליו הוא מצביע
  7. אם המצביע הוא 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 כדי לבדוק את המצביע ולהשתמש בו בבטחה
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין