Je travaille sur un projet et je continue à contourner cette erreur qui ne me permettra pas de compléter le projet. Lorsque j'initialise l'un de mes indications pour indiquer à un objet qui sera effectué lors de l'exécution du programme et que je l'initialise à null code>. Ensuite, lorsque je vérifie pour voir ce qu'il est réglé sur elle renvoie une valeur de
nil code>. Comment est une chose possible? Je ne croyais pas que les indicateurs de Nil existaient dans C. Y a-t-il un chemin autour de cela?
7 Réponses :
réponse originale car il peut toujours être utile: p> % p code> dans
printf code> formate un type de pointeur. Cela va distinguer un pointeur NULL et imprimer
(nil) code> car il s'agit d'une valeur spéciale dans le contexte d'un pointeur. Si vous souhaitez produire 0 pour un pointeur NULL, lancez le pointeur sur un entier et utilisez
% d code> à la place:
null code> est une macro définie comme
0 code> ou
((vide *) 0) code>, donc si vous définissez un pointeur Pour
NULL code> C'est exactement la même chose que le réglage sur
0 code>. Cela fonctionne pour le but de déclarer des pointeurs nuls car la mémoire à l'adresse 0 ne sera jamais allouée à votre programme. P> P>
'nil' n'existe pas en C sauf si vous le définissez.
structure order_line * front = null; ... printf ("tête:% p \ n", avant);
En C, null code> peut être défini comme
((vide *) 0) code>
@Chris mais cette ligne aboutit-elle à nil code>?
J'ai ajouté une partie du code dans. Le printf est ce qui finit par me donner un (nil)
Je l'ai inscrit que nous avions donné un pointeur qui n'avait pas eu de mémoire alloué à celui-ci au lieu de cela, il était simplement défini.
Je suppose que Nil est ce que votre débogueur vous dit. Dans la plupart des compilateurs, NULL est juste #define ED à 0 de toute façon, de sorte que ce nom n'est pas aussi important. p>
Je fais un chèque à l'intérieur pour vérifier NULL, mais quand je vérifie ce que cela signifie que je reçois (nil).
Typedef à 0? Ce n'est pas un typlef que j'ai jamais entendu parler. : p
Comme d'autres ont déclaré, il n'y a pas de nul le pointeur nul en c. p>
Peut être votre allocation de mémoire échoue, provoquant l'affectation 0 code> au pointeur. P>
Lorsque vous imprimez un pointeur à l'aide de L'argument doit être un pointeur à vide. La valeur du pointeur est convertie en une séquence de caractères imprimables, de manière dépendante de la mise en œuvre. P>
blockQuote>
Je suppose que cela signifie que si le pointeur est printf ("% p", quelqueptr) code>, il est imprimé dans une la manière définie par la mise en œuvre em>, conformément à cette citation du < a href = "http://pubs.opengroup.org/onlinepubs/007908799/xsh/fprintf.html" rel = "nofollow"> Spécification printf de POSIX (libellé similaire existe dans la spécification C99). p>
null code>, il peut l'imprimer si elle veut, y compris l'imprimer comme
nil code> ou
0x00000000 code > ou
0 code>. p>
Eh bien, je ne finirai jamais à obtenir (nul) mais y a-t-il un moyen de contourner ce problème parce que mes chèques pour NULL n'atteignent pas cela et continue de faute de SEG MON PROGRAMME
@Chris: Convertissez-le en un type entier et imprimez-le comme un entier plutôt qu'un pointeur (il s'agit également d'un comportement défini par la mise en œuvre, mais est généralement bien supporté). Le type uintptr_t code> défini dans
Si votre question consiste à comparer la valeur du pointeur à NULL, la valeur imprimée par Printf () ne devrait pas avoir d'importance. Vous pouvez toujours faire si (ptr == null) b> pour cela.
ptr = (nil) et null = (nil) => ptr = null :) ul>
L'erreur que vous obtenez doit en raison d'une autre raison. P>
Utilisez à imprimer merci
Packia p> p> tête: (null), 0, (nil) code> p>
Après avoir lancé le pointeur de structure avec INT, il fournit la condition attendue avec l'instruction IF .. sortie: - p> L'adresse de la variable est-- -PS-> P --- Après la suppression-- NIL
L'adresse de la variable est - PS-> p --- après la suppression-- 0 p> Il évaluera à FALSE pour si l'état. P> p>
Comment vérifiez-vous votre valeur de pointeur? Débogueur? Printf? Cela peut simplement être un problème de représentation du pointeur NULL par votre outil.
Que signifie "nil" ici? 0? Objectif c?
J'utilise Printf (% P) pour vérifier et il est régulier C pas objectif
Pouvez-vous poster un exemple de code avec lequel le problème est reproductible?
@Chris Null Pointers fait partie intégrante de C, et certains systèmes imprimeront simplement un pointeur NULL comme "NIL" lorsque vous utilisez le spécificateur de conversion
% p code>. Publier un code qui montre l'erreur.
Pourriez-vous expliquer si NIL est la sortie de PrintF, un message d'erreur d'exécution, un message que vous avez obtenu au moment de la compilation? Dans le premier cas, je pense que c'est normal.