V C je NULL symbolická konštanta, ktorá vždy ukazuje na neexistujúci bod v pamäti. Napriek tomu, že mnoho programátorov to považuje za rovné 0, je to zjednodušenie, ktoré vás môže neskôr podraziť. Najlepšie je skontrolovať svoje ukazovatele voči NULL priamo a použiť 0 v iných kontextoch. Vďaka tomu bude váš kód čistý a ľahko zrozumiteľný, pretože budete vedieť, že pracujete s ukazovateľmi vždy, keď uvidíte NULL.
Kroky
Časť 1 z 2: Vykonanie nulovej kontroly
Krok 1. Použite štandardný nulový kontrolný kód
Nasleduje najzrejmejší spôsob, ako napísať nulovú kontrolu. Použijeme ptr v tomto článku ako názov ukazovateľa, ktorý kontrolujete.
-
ak (ptr == NULL)
{
// kód, ak je ukazovateľ NULL
} else {
// kód, ak nie NULL
}
Krok 2. Test na akúkoľvek hodnotu, ale NULL
Niekedy je namiesto toho pohodlnejšie testovať nerovnosť. Tu žiadne prekvapenie:
-
if (ptr! = NULL) {
// kód, ak nie NULL
}
Krok 3. Napíšte NULL, aby ste sa vyhli chybám (voliteľné)
Hlavnou nevýhodou metódy PTR == NULL je šanca, že namiesto toho omylom napíšete ptr = NULL a priradíte tomuto ukazovateľu hodnotu NULL. To môže spôsobiť veľkú bolesť hlavy. Pretože testovanie (ne) rovnosti zaobchádza s operandmi symetricky, môžete presne rovnaký výsledok dosiahnuť písaním ak (NULL == ptr) namiesto. Toto je odolnejšie voči preklepom, pretože náhodný NULL = ptr vytvára jednoduchú chybu pri kompilácii.
Niektorým programátorom to pripadá trochu nepríjemné, ale je to úplne platné. To, ktorý prístup použijete, závisí od osobných preferencií a od toho, ako dobre váš kompilátor dokáže rozpoznať chybu if (ptr = NULL)
Krok 4. Otestujte, či je premenná pravdivá
Jednoduchý ak (ptr) testuje, či je ptr PRAVDA. Vráti hodnotu FALSE, ak ptr je NULL alebo ak je ptr 0. Rozdiel v mnohých prípadoch nezáleží, ale uvedomte si, že tieto nie sú vo všetkých architektúrach totožné.
Opak je tento ak (! ptr), ktorý vráti hodnotu TRUE, ak je ptr FALSE.
Časť 2 z 2: Vyhýbanie sa chybám
Krok 1. Pred kontrolou NULL nastavte ukazovateľ
Jednou z bežných chýb je predpokladať, že novo vytvorený ukazovateľ má hodnotu NULL. To nie je pravda. Nepriradený ukazovateľ stále ukazuje na adresu pamäte, ale nie na adresu, ktorú ste zadali. Je bežnou praxou nastaviť novovytvorené alebo novo uvoľnené ukazovatele na NULL, aby ste sa presvedčili, že túto nepotrebnú adresu nepoužijete náhodou.
-
Vyhnite sa tejto chybe:
char *ptr;
ak (ptr == NULL)
{
// To vráti FALSE. Ukazovateľovi bola priradená platná hodnota.
}
-
Namiesto toho napíšte:
char *ptr = NULL; // Toto priradí ukazovateľ na NULL
ak (ptr == NULL)
{
// Toto vráti TRUE, ak ukazovateľ nebol znovu priradený.
}
Krok 2. Dávajte pozor na funkcie, ktoré by mohli vrátiť NULL
Ak môže funkcia vracať hodnotu NULL, zamyslite sa nad tým, či je to možné a či to nespôsobí problémy s kódom neskôr. Tu je príklad funkcie malloc používajúcej null check (ak (ptr)), aby sa zabezpečilo, že spracováva iba ukazovatele s platnými hodnotami:
-
int * ptr = malloc (N * sizeof (int));
if (ptr) {
int i;
pre (i = 0; i <N; ++ i)
ptr = i;
}
Krok 3. Pochopte, že NULL je 0, ale pri práci s ukazovateľmi by ste kvôli prehľadnosti mali vždy používať NULL namiesto 0
Historicky C reprezentovalo NULL ako číslo 0 (to znamená 0x00). V dnešnej dobe to môže byť trochu komplikovanejšie a líši sa podľa operačného systému. NULL môžete zvyčajne skontrolovať pomocou ptr == 0, Existujú však rohové prípady, kde to môže spôsobiť problém. Ešte dôležitejšie je, že pomocou NULL je zrejmé, že pracujete s ukazovateľmi pre ostatných, ktorí čítajú váš kód.