Qu'est-ce que "erreur d'affectation de pointeur nul"?
L'une des questions d'entrevue d'emploi sur C les pointeurs ici est la suivante: ce qui est de pointeur null cession d'erreur?
J'ai googlé pour un certain temps et ne vois aucune explication raisonnable. Qu'est-ce que cela? Essayer d'écrire par l'intermédiaire d'un pointeur null? Quelque chose de l'architecture ou de l'environnement spécifique? Quelle est exactement cette erreur?
source d'informationauteur sharptooth
Vous devez vous connecter pour publier un commentaire.
http://www.faqs.org/qa/qa-3786.html
Exemple de code:
Explication:
Sur presque tous les systèmes, l'adresse 0 est réservée. Le système ne vous permettra pas d'écrire à cet emplacement. Si vous essayez, vous obtiendrez une exception d'exécution (violation d'accès, erreur de segmentation, etc.).
En fait je ne me souviens pas de la source, mais, selon la source, cette erreur d'exécution est limitée à de petites et moyennes modèles de mémoire d'être mis en service par le compilateur correspondantes. Vous voyez, comme dit avant, le pointeur null en réalité n'a pas de points à zéro, en fait différents compilateurs utilisent différents mais de mémoire fixe emplacement pour être utilisé comme pointeur null.
Permet de considérer le cas de TC compilateur, ce compilateur place de quatre octets zéro au bas du segment de données et TC avis de droit d'auteur. TC utilise aussi DS:0000 emplacement, bas de segment de données en tant que pointeurs null emplacement. Ainsi, l'affectation d'une valeur à ce pointeur null, serait actully changer les quatre octets, et probablement, en désordre les avis de droit d'auteur.
Maintenant, à la fin du programme, les quatre zéros et le droit d'auteur de la bannière sont vérifiées pour tout type d'altération. Si des modifications sont trouvés, il génère un Pointeur Null Cession d'erreur.
Donc, je pense que c'est pas juste le pointeur null, un pointeur qui obtient sauvage, si tente d'accéder à certains domaines clés, vous êtes accueilli avec un Pointeur Null Cession d'Erreur.
Il existe de nombreux scénarios où vous pouvez voir les problèmes. Mais la chose est, vous n'avez pas à allouer la mémoire correctement. Le code suivant devrait produire pointeur Null affectation message d'erreur lorsque vous exécutez le programme. Remarque: Il compile correctement.
C'est une erreur d'exécution se produit lorsque vous essayez de point illégale de l'espace mémoire, généralement de l'adresse 0 est réservée pour les OS.
2017-10-27: réécrire
Cette description est en dehors de la définition conventionnelle d'un pointeur null erreur, mais il peut produire un pointeur null néanmoins, bien que le plus souvent la production d'autres erreurs, ou rien du tout. Souvent, il ne donne aucune indication de son existence autre que 'si' le programme ne parvient pas à s'exécuter comme prévu. Cela fournit non conventionnelles, les exemples et les définitions des sources potentielles de pointeur null affectation des erreurs, plutôt que la définition classique de la compréhension qui est plus une erreur dans la convention qu'une erreur dans la logique de programmation.
Ce type d'erreur (non défini, ou null) est beaucoup plus rare. Mais la programmation moderne, à l'aide de mini appareils comme un Arduino, Raspberry PI, AMD, ou n'importe quel autre ordinateur sur une puce de programmation existe en une myriade de formes, dont beaucoup sont aussi simple aujourd'hui comme hier, ce problème existe encore aujourd'hui et peut se produire même dans le plus sophistiqué des systèmes. En outre, les entreprises qui construisent leurs propres variables ou des structures de données sont probablement aussi la plus probable de personnes de voir cela de nos jours. L'intention est de montrer des exemples qui peuvent aider à la reconnaissance.
Pour que ce soit un 'null' pointeur d'erreur, la valeur attribuée doit être '0' ou 'null'. Mais il a toujours été appelé un "pointeur null erreur" pas seulement d'être un simple pointeur null; mais, à cause de leur présence lors de l'effacement ou de la réinitialisation d'un tableau, la routine de le faire dépassements ou demeure en deçà des limites du tableau. Toutefois, simplement c'est une erreur créé par la limite de tableau de calcul qui peut produire de pointeur null affectations et d'autres erreurs. Ce sont souvent pas faciles à détecter et ne peut pas générer une erreur immédiatement ou à tous les, parce que l'adresse du pointeur à l'origine, a souligné lors de l'défini a été écrasée et contient maintenant une contrainte de valeur (mauvaise adresse). Et quand, et par quoi elle a été remplacée peut être presque impossible à trouver. Ce qui est inclus dans le cadre de la définition des types d'erreurs qui produisent des pointeurs null. Lorsque le pointeur sera remplacé par une valeur null, ou zéro et il va générer une erreur, et l'on se retrouve avec le problème de trouver ce que modifié. Des précautions supplémentaires doivent être prises pour s'assurer que les indices sont calculés correctement avec la considération de manière appropriée de la base de l'option 0 ou 1. Et aussi calculer correctement lors du déplacement de blocs de données. Heureusement, de nombreuses sophistiqué de logiciels de développement d'applications et de haut niveau, les langues peuvent attraper beaucoup de ces questions avant ou pendant la compilation, lorsque la variable de type tableau est explicitement exprimés, ou lorsque le programme peut être écrit dans un environnement d'exécution et les moniteurs de la matrice de limites.
Un pointeur null est, comme il a été défini dans les anciens jours, toute variable qui est utilisé comme un pointeur et l'adresse contenu du pointeur est l'adresse, le sens de l'adresse sur laquelle pointe le pointeur, pas l'emplacement des points de, est égal à zéro ou à la valeur null, OU a été modifié, remplacé sans que le programmeur de l'intention ou la connaissance, ce qui pourrait être une valeur nulle, mais pourrait être n'importe quelle valeur. Souvent, seul le pointeur null crée un message d'erreur, même si le code peut créer une erreur, car c'est souvent des blocs de données contenant des valeurs null qui est écrit à de mauvais endroits. Au lieu de pointer à l'origine défini l'adresse de l'endroit où les données doivent résider, il contient maintenant une valeur null ou une adresse inconnue de déplacer les données vers un invalide ou non désirés emplacement d'écraser et d'endommager le code ou les données. Parce que l'échec causé aux données ou le code ne peut pas exécuter immédiatement, ou obtenir de l'utiliser comme il se déplace à un emplacement de la mémoire inutilisée, lorsque le code ou les données est la cause d'un problème à un moment plus tard dans la course, il ne peut y avoir de l'information sur le "réel", l'emplacement de l'erreur, si elle crée ou les ayants droit de pointeurs null ou de corruption, il modifie le code, et les choses peuvent devenir bizarre, vraiment bizarre.
Pour résumer, un pointeur null est toute adresse null utilisé pour pointer vers un emplacement de la mémoire, indépendamment de ce qu'il crée. Un pointeur null cession d'erreur, ou de nombreuses autres erreurs, peuvent être attribuées à cette question et par l'exemple.
Sur une simplification de l'architecture ou des environnements de programmation, Il peut se référer à n'importe quel code qui finit involontairement par la création de valeurs null comme des pointeurs, ou crée un bug qui de toute façon s'arrête l'exécution, comme l'écrasement d'un octet dans le rendement de la pile, la réécriture du code, de mettre de code ou de données dans le mauvais endroit, et pas seulement comme une adresse. Ainsi, alors que les exemples ci-dessus, les beaux travaux de définir un exemple d'un pointeur null. Nous avons donc étendre le concept, Un pointeur null est un pointeur qui est utilisé comme une variable pointeur, et l'emplacement de l'adresse de cette variable pour l'une des multiples raisons qui contient maintenant un 'null' ou involontaires valeur qui pointe vers un indésirable emplacement de mémoire, peu importe comment il est arrivé là.
Donc, finalement, on peut obtenir un pointeur null erreur, et lors de l'examen de l'pointeur trouve qu'il contient une valeur null; mais, impossible de trouver le code qui a placé la valeur null dans le pointeur ou attribuée. C'est une définition large de la notion de pointeur null cession d'erreur, et est le pire scénario d'un pointeur null erreur. Lorsque cela se produit dans un programme plus large, ce peut être la mort, car si l'erreur existait pas auparavant, et a été écrit pour le mauvais emplacement de la mémoire, et que l'emplacement avait pas encore été affecté, l'erreur passe inaperçue jusqu'à ce que le programme est élargi, et maintenant le mauvais emplacement de la mémoire peuvent exister à l'intérieur du nouveau code, la génération aléatoire des erreurs. Par exemple: la mauvaise adresse valeur provoque l'écriture des données à l'extérieur de la variable d'espace défini, mais passe inaperçu pour un certain temps, car il a été écrit, et qu'il soit lu, et tout ce qui "apparaît" OK! Mais, le programme s'élargit, devient plus grand, nouveau code existe dans le même espace d'adressage de la mémoire, où l'original vieux bug existait qui écrit des données à la mauvaise adresse de l'espace et personne n'a remarqué, que ce soit un octet, ou un bloc de données! Mais, maintenant, il y a un nouveau code. Et il est corrompu par l'ancien inconnues bug, et de trouver l'erreur qui a existé un an plus tôt est maintenant presque, si ce n'est totalement, impossible de le trouver. L'administrateur de la logique détermine habituellement, pourquoi regardez-là, il a couru et a très bien fonctionné l'année dernière. Mais, maintenant, rien ne fonctionne, les principales pièces sont cassées, regarder et regarder et rien ne vous trouvez. C'est comme si l'erreur n'existe pas, et pourtant, il ne. Quelle en est la cause, qui soupçonne le code écrit des années plus tôt? Pointeurs Null et beaucoup d'autres erreurs sont causées par ce trop.
Peut-être cette réponse est égaré et servirait mieux être énumérés ailleurs. Modérateur? Peut-être, il est à craindre parce que cette "réponse" n'est pas considéré comme pertinent, car il ya une certaine inquiétude sur l'utilisation du mot "cession" dans le doute, intentionnellement attribué. Toutefois, la notion d'affectation ne nécessite pas la connaissance ou le consentement. Un algorithme ou d'un code permet d'affecter des valeurs. Pointeurs Null peut être créé de plusieurs manières, l'exemple ici est probablement le plus commun dehors des classiques des erreurs.
Il semble que cette information a 'un' place, et est présentée ici comme une réponse. Positif fructueux commentaires ou des suggestions sont appréciés, plutôt qu'une simple baisse de vote, si quelqu'un se soucie de commentaire, peut-être un méta discussion est en ordre?
Acclamations.