Question

J'ai un code dans Visual Studio 2008 en C ++ qui fonctionne avec des fichiers simplement par fopen et FCLOSE. Tout fonctionne parfaitement en mode débogage. et je l'ai testé avec plusieurs jeux de données. Mais cela ne fonctionne pas en mode de libération. Il plante tout le temps. J'ai désactivé toutes les optimisations, aussi il n'y a pas de dépendance à quoi que ce soit (dans l'éditeur de liens), ainsi que je l'ai paramétrés:

Optimisation: Désactivé (/ Od) Conserver les données non référencées. Ne retirez pas redondante Optimize pour Windows98: NO

Je garde encore se demander comment il ne devrait pas fonctionner dans ces circonstances. Que dois-je désactiver le laisser fonctionner comme en mode débogage?

Je pense que si cela fonctionne en mode de sortie mais pas en mode débogage, il est peut-être un défaut de codage, mais l'inverse semble bizarre. est-ce pas?

Je vous remercie de toute aide. --Nima

Était-ce utile?

La solution

modes de débogage initialize souvent les allocations de données tas. Le programme pourrait dépendre de ce comportement. Rechercher des variables et des tampons qui ne reçoivent pas initialisés.

Autres conseils

1) Vérifiez que tout et tout le code qui dépend de macros préprocesseur.
2) Utilisez assert () pour vérifier l'état des conditions préalables du programme. Ceux-ci ne doivent pas s'attendre à l'impact des flux de programme (ie. La suppression du chèque serait encore permettre le code de fournir le même résultat final), car assert est une macro. Utilisez conditionals réguliers d'exécution lorsqu'un assert ne le fera pas.
3) En effet, ne laissez jamais une variable dans un état non initialisée.

De loin la plus explication probable est DIFFERENTES un comportement non défini dans les deux modes causés par la mémoire non initialisée. Le manque de sécurité des threads et des problèmes avec le code de synchronisation peuvent également présenter ce genre de comportement en raison des environnements différents de synchronisation entre le débogage et la libération, mais si votre programme n'est pas multi-thread alors évidemment cela ne peut l'être.

J'avais vécu cela et dans mon cas, il était à cause d'un de mon tableau de struct qui suppose d'avoir seul indice X, mais ma mise en boucle qui vérifient cette structure a été sur la vérification de X + 1 index. Intéressant est le mode débogage est en cours d'exécution bien que j'étais sur Visual C ++ 2005.

J'ai passé quelques heures en mettant en printf dans ma ligne de codage par ligne pour attraper le virus. Tout le monde a une bonne façon de déboguer ce genre d'erreur s'il vous plaît laissez-moi savoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top