Basis van programmeren in C
Welke beschrijving van wat er in C gebeurt als een NULL-pointer wordt gederefereerd (*p wordt gelezen terwijl p NULL is), is juist?
- ADe standaard eist dat dit tijdens de uitvoering als fout wordt gedetecteerd, dus in elke omgeving drukt het programma een foutmelding af en stopt het
- BNULL is vastgelegd als wijzend naar adres 0, dus in elke omgeving wordt de inhoud van adres 0 gelezen en gaat de verwerking door
- CHet is ongedefinieerd gedrag; onder een besturingssysteem crasht het programma in het algemeen, maar op een microcontroller zonder MMU kan adres 0 leesbaar zijn en blijft de fout soms onopgemerkt
Antwoord en toelichting tonen
Antwoord: C. Het is ongedefinieerd gedrag; onder een besturingssysteem crasht het programma in het algemeen, maar op een microcontroller zonder MMU kan adres 0 leesbaar zijn en blijft de fout soms onopgemerkt
Het derefereren van een NULL-pointer is ongedefinieerd gedrag, en de standaard zegt niet wat er gebeurt. Linux en Windows wijzen rond adres 0 geen pagina's toe, dus een dereferentie veroorzaakt een page fault (paginafout) en het programma wordt in het algemeen abnormaal beëindigd (op Linux bijvoorbeeld met een segmentation fault). Op een kleine microcontroller zonder MMU kan op adres 0 flashgeheugen of de tabel met interruptvectoren staan en leesbaar zijn, zodat de fout tot verkeerd gedrag leidt zonder ooit zichtbaar te worden. Het is belangrijk om vóór het gebruik van een pointer te controleren dat die niet NULL is.