A C -ben a NULL egy szimbolikus állandó, amely mindig egy nem létező pontra mutat a memóriában. Bár sok programozó 0 -val egyenlőnek tekinti, ez egy egyszerűsítés, amely később felbosszanthat. A legjobb, ha közvetlenül a NULL ellenében ellenőrzi a mutatóit, és más kontextusokban 0 -t használ. Így a kódja tisztán és könnyen érthető marad, mivel minden alkalommal, amikor NULL -t lát, tudni fogja, hogy mutatókkal dolgozik.
Lépések
Rész 1 /2: Null ellenőrzés végrehajtása
1. lépés. Használja a standard null ellenőrző kódot
Az alábbiakban a legnyilvánvalóbb módon írhatunk null csekket. Mi használni fogjuk ptr ebben a cikkben az ellenőrzött mutató neve.
-
ha (ptr == NULL)
{
// kód, ha a mutató NULL
} más {
// kód, ha nem NULL
}
Lépés 2. Ellenőrizze a NULL értéken kívüli értékeket
Időnként kényelmesebb az egyenlőtlenség tesztelése. Itt nincs meglepetés:
-
if (ptr! = NULL) {
// kód, ha nem NULL
}
3. lépés: A hibák elkerülése érdekében először írja be a NULL értéket (opcionális)
A PTR == NULL módszer fő hátránya, hogy véletlenül beírja a ptr = NULL parancsot, és hozzárendeli a mutatóhoz a NULL értéket. Ez komoly fejfájást okozhat. Mivel az (egyenlőtlenség) tesztelése szimmetrikusan kezeli az operandusokat, írással pontosan ugyanazt az eredményt kaphatja ha (NULL == ptr) helyette. Ez jobban ellenáll a gépelési hibáknak, mivel a véletlen NULL = ptr egyszerű fordítási hibát hoz létre.
Ez néhány programozó számára kissé kínosnak tűnik, de tökéletesen érvényes. Az, hogy melyik módszert használja, csak személyes preferenciáktól függ, és attól, hogy a fordító mennyire tudja észlelni az if (ptr = NULL) hibát
4. lépés Ellenőrizze, hogy a változó igaz -e
Egy egyszerű ha (ptr) teszteli, hogy a ptr IGAZ -e. HAMIS értéket ad vissza, ha a ptr értéke NULL, vagy ha a ptr értéke 0. A megkülönböztetés sok esetben nem számít, de ne feledje, hogy ezek nem minden architektúrában azonosak.
Ennek a fordítottja az ha (! ptr), amely igaz értéket ad vissza, ha a ptr HAMIS.
2. rész 2: A hibák elkerülése
1. lépés Állítsa be a mutatót, mielőtt ellenőrizné a NULL értéket
Az egyik gyakori hiba azt feltételezni, hogy az újonnan létrehozott mutató NULL értékkel rendelkezik. Ez nem igaz. A hozzá nem rendelt mutató továbbra is egy memóriacímre mutat, csak nem az Ön által megadottra. Gyakori gyakorlat, hogy az újonnan létrehozott vagy újonnan felszabadított mutatókat NULL értékre állítja, hogy megbizonyosodjon arról, hogy véletlenül nem használja ezt a haszontalan címet.
-
Kerülje ezt a hibát:
char *ptr;
ha (ptr == NULL)
{
// Ez hamis eredményt ad vissza. A mutató érvényes értéket kapott.
}
-
Ehelyett írja:
char *ptr = NULL; // Ez a mutatót a NULL -hoz rendeli
ha (ptr == NULL)
{
// Ez az IGAZ értéket adja vissza, ha a mutató nincs hozzárendelve.
}
2. lépés. Ügyeljen a NULL -t visszakapó funkciókra
Ha egy függvény visszaadhatja a NULL értéket, gondolja át, hogy ez lehetséges -e, és hogy ez később problémákat okoz -e a kódban. Íme egy példa a malloc függvényre a null ellenőrzés használatával (ha (ptr)), hogy csak érvényes értékű mutatókat kezeljen:
-
int * ptr = malloc (N * sizeof (int));
if (ptr) {
int i;
mert (i = 0; i <N; ++ i)
ptr = i;
}
Lépés 3. Értsd meg, hogy a NULL 0, de mindig használd a NULL -ot a 0 helyett, ha mutatókkal dolgozol az egyértelműség kedvéért
Történelmileg a C a NULL -t 0 -nak (azaz 0x00 -nak) jelölte. Manapság ez kissé bonyolultabbá válhat, és operációs rendszertől függően változhat. Általában a NULL használatával ellenőrizheti a ptr == 0, de vannak olyan sarokesetek, amikor ez problémát okozhat. Talán még ennél is fontosabb, hogy a NULL használatával nyilvánvalóvá válik, hogy mutatókkal dolgozik más, a kódot olvasó emberek számára.