Lorsqu'un défaut de segmentation se produit, le printf () avant qu'il ne s'exécute pas.
main() { printf( "something" ); statement; //this statement causes a segmentation fault }
3 Réponses :
Assurez-vous d'inclure une nouvelle ligne Une autre option consiste à rincer la sortie vous-même à l'aide de "\ n" code> dans votre instruction PrintF. Normalement, au moins dans les systèmes UNIX,
stdout code> est tamponné de la ligne que le caractère de nouvelle ligne rend la ligne à apparaître immédiatement. Vous avez probablement omis
"\ n" code> (ou votre sortie n'est pas rincé pour une autre raison) et c'est pourquoi vous ne pouvez pas voir la chaîne imprimée. P>
fflush (stdout) code> après avoir appelé
printf code>. P>
Il fait pour la sortie de la ligne tamponnée
@ M.32 - Si vous redirigez votre sortie dans un fichier, le truc de tampon de ligne ne fonctionnera pas. Il suffit d'utiliser fflush () - il est portable et cohérent.
Un flux de sortie peut ne pas être émis avant un crash de programme, mais vous pouvez forcer les octets à produire en les flushing avec fflush ().
Je le fais habituellement avec quelque chose comme ceci: P>
if (trace) { fflush(stdout); }
"Trace" est quelque chose de spécial .. ?? ou vous venez de détecter la défaillance de la segmentation.?
@ M.32 - J'ai pris son Trace Code> pour être une variable qu'il configurée lors d'une init, peut-être d'une option de ligne de commande.
Alternativement, fprintf code> à
starr code>.
@Davidthornley non, tout en envoyant à stardr, c'est une bonne chose à faire, il serait toujours rattrapé et éventuellement i> non envoyé; Ce quicule est dit au système de rincer les écrivies en attente - obtenez-les! Ainsi, Fprintf à Stdrr aurait le même comportement que l'appel précédent.
stardr code> est absorbé par défaut, même s'il est redirigé vers un fichier. Il n'a jamais besoin de rinçage manuel après que l'IO l'appelait.
sortie via Vous devez appeler printf () code> et toute autre fonction d'E / S standard est tamponnée dans la bibliothèque C standard C. P>
fflush () code> pour vous assurer que la sortie est envoyée au TTY avant que votre programme ne se bloque. P>
Intéressant non motif -1, quelqu'un.