2013-07-23 4 views
2

Je suis un programmeur intermédiaire, écrivant un programme qui est probablement beaucoup trop compliqué pour moi. Les programmes ont pour but de construire certains tableaux 2-D, et ont quelques objets de classe différents qui communiquent entre eux d'une manière pas si simple. Afin de déboguer, j'ai ajouté une ligne de code à la sortie où j'étais dans le programme (cout < < "ici";). Le programme fonctionne maintenant, mais si je supprime l'instruction cout, le résultat global de l'ensemble du programme échoue; le programme ne suit pas la procédure prévue pour créer lesdites matrices 2-d. Donc, ma question est: Qu'est-ce qui pourrait éventuellement se produire? ou plutôt, comment inclurait-il une déclaration cout "corrigeant" (ou ayant une sorte d'impact sur) l'autre code environnant? Il ne semble pas qu'une déclaration cout aurait un impact sur Buffer overflow, mais n'hésitez pas à me renseigner si c'est le cas.Pourquoi supprimer 'cout' de ma fonction change son résultat?

+3

Comportement indéfini. – chris

+7

Vous savez, c'est l'un de ces moments où un SSCCE serait incroyablement utile. Considérant que c'est probablement UB ou quelque chose de minuscule. – Rapptz

+2

Pourriez-vous fournir un exemple de code afin que nous puissions voir quel est le problème? – Longball27

Répondre

8

Votre programme utilise des constructions définies pour provoquer un "comportement indéfini". Plus concrètement, le programme lit probablement la mémoire non initialisée de la pile d'exécution ou écrit au-delà des limites de quelque chose stocké sur la pile. L'appel de fonctions, comme imprimer quelque chose à cout, modifie la pile et peut entraîner un comportement différent du programme si vous avez ce genre de bugs.

+0

+1 pour tout après "plus concrètement". J'ai eu le même problème, et c'est vraiment utile pour résoudre ce qui semble être un bug fou pour les novices comme moi. – OJFord

Questions connexes