Bases de la programmation en C
En C, quelle description de ce qui se passe lorsqu'un pointeur NULL est déréférencé (lecture de *p alors que p vaut NULL) est correcte ?
- ALa norme exige qu'il soit toujours détecté comme une erreur d'exécution : dans tout environnement, le programme affiche un message d'erreur et s'arrête
- BNULL est défini comme désignant l'adresse 0 : dans tout environnement, le contenu de l'adresse 0 est lu et le traitement continue
- CC'est un comportement indéfini : sous un système d'exploitation, le programme s'arrête en général anormalement, mais sur un microcontrôleur sans MMU l'adresse 0 peut être lisible et l'erreur passer inaperçue
Afficher la réponse et l'explication
Réponse : C. C'est un comportement indéfini : sous un système d'exploitation, le programme s'arrête en général anormalement, mais sur un microcontrôleur sans MMU l'adresse 0 peut être lisible et l'erreur passer inaperçue
Déréférencer un pointeur NULL est un comportement indéfini : la norme ne dit pas ce qui se passe. Linux et Windows n'attribuent aucune page autour de l'adresse 0 : un déréférencement provoque un défaut de page, et le programme se termine en général anormalement (par une erreur de segmentation sous Linux, par exemple). Sur un petit microcontrôleur sans MMU, l'adresse 0 peut contenir de la mémoire flash ou les vecteurs d'interruption et être lisible : l'erreur peut alors provoquer des dysfonctionnements sans jamais se manifester. Il est important de vérifier qu'un pointeur n'est pas NULL avant de l'utiliser.
Continuer : 9 autres questions sur Bases de la programmation en C