ב- C, NULL הוא קבוע סמלי המצביע תמיד על נקודה שאינה קיימת בזיכרון. למרות שמתכנתים רבים מתייחסים לזה כשווה ל- 0, זהו פישוט שיכול להטעות אותך בהמשך. עדיף לבדוק ישירות את הנקודות שלך מול NULL ולהשתמש ב -0 בהקשרים אחרים. זה שומר על קודך נקי וקל להבנה, מכיוון שתדע שאתה עובד עם מצביעים בכל פעם שאתה רואה NULL.
צעדים
חלק 1 מתוך 2: ביצוע בדיקת אפס
שלב 1. השתמש בקוד בדיקת האפס הסטנדרטי
להלן הדרך הברורה ביותר לכתוב צ'ק בטל. נשתמש ptr במאמר זה כשם המצביע שאתה בודק.
-
אם (ptr == NULL)
{
// קוד אם המצביע הוא NULL
} אחר {
// קוד אם לא NULL
}
שלב 2. בדוק כל ערך מלבד NULL
לפעמים יותר נוח לבדוק אם אין שוויון. אין כאן הפתעות:
-
אם (ptr! = NULL) {
// קוד אם לא NULL
}
שלב 3. כתוב תחילה את ה- NULL כדי להימנע משגיאות (אופציונלי)
החיסרון העיקרי בשיטת PTR == NULL הוא הסיכוי שתקליד בטעות ptr = NULL במקום זאת ותקצה את ערך NULL לאותו מצביע. זה יכול לגרום לכאב ראש גדול. מכיוון שבדיקת שוויון (ב) מתייחסת לאופרנדים באופן סימטרי, תוכל לקבל בדיוק את אותה התוצאה על ידי כתיבה אם (NULL == ptr) במקום זאת. זה עמיד יותר להקלדות, מכיוון ש- NULL = ptr מקרי יוצר שגיאת הידור פשוטה.
זה נראה קצת מביך עבור כמה מתכנתים, אבל זה תקף לחלוטין. איזו גישה אתה משתמש תלויה רק בהעדפה אישית, ועד כמה המהדר שלך מצליח לזהות את השגיאה if (ptr = NULL)
שלב 4. בדוק אם המשתנה נכון
פשוט אם (ptr) בודק אם ptr הוא TRUE. הוא יחזיר FALSE אם ptr הוא NULL, או אם ptr הוא 0. ההבחנה לא חשובה במקרים רבים, אך שים לב כי אלה אינם זהים בכל הארכיטקטורות.
ההיפך מזה הוא אם (! ptr), שיחזיר TRUE אם ptr הוא FALSE.
חלק 2 מתוך 2: הימנעות מטעויות
שלב 1. הגדר מצביע לפני בדיקת NULL
טעות נפוצה אחת היא להניח שלמצביע החדש שנוצר יש ערך NULL. זה לא נכון. מצביע לא מוקצה עדיין מצביע על כתובת זיכרון, רק לא אחת שציינת. נהוג להגדיר את הנקודות החדשות או החדשות ששוחררו ל- NULL כדי לוודא שלא תשתמש בכתובת לא מועילה זו במקרה.
-
הימנע מטעות זו:
char *ptr;
אם (ptr == NULL)
{
// פעולה זו תחזיר FALSE. הצביע קיבל ערך חוקי.
}
-
במקום זאת כתוב:
char *ptr = NULL; // זה מקצה את המצביע ל- NULL
אם (ptr == NULL)
{
// פעולה זו תחזיר TRUE אם המצביע לא הוקצה מחדש.
}
שלב 2. שימו לב לפונקציות שיכולות להחזיר NULL
אם פונקציה יכולה להחזיר NULL, חשוב אם זו אפשרות והאם זה יגרום לבעיות בהמשך הקוד שלך. להלן דוגמא לפונקציית malloc באמצעות בדיקת null (אם (ptr)) כדי להבטיח שהוא מטפל רק במצביעים עם ערכים תקפים:
-
int * ptr = malloc (N * sizeof (int));
אם (ptr) {
int i;
עבור (i = 0; i <N; ++ i)
ptr = i;
}
שלב 3. הבין ש- NULL הוא 0 אך עליך תמיד להשתמש ב- NULL במקום ב- 0 כאשר אתה עובד עם מצביעים לשם הבהרה
מבחינה היסטורית, C ייצג את NULL כמספר 0 (כלומר 0x00). כיום זה יכול להיות קצת יותר מסובך, ומשתנה בהתאם למערכת ההפעלה. בדרך כלל תוכל לבדוק אם יש NULL באמצעות ptr == 0, אך ישנם מקרי פינה בהם הדבר עלול לגרום לבעיה. אולי חשוב מכך, השימוש ב- NULL מבהיר שאתה עובד עם עצות לאנשים אחרים הקוראים את הקוד שלך.