2011-11-12 2 views
1

J'ai donc un projet que j'ai compilé sur le compilateur apple-darwin11-llvm-g ++ - 4.2. Le projet compilera avec GCC 4.4.5 sur RedHat Linux mais il y a des choses très étranges qui se passent dans le runtime. Il n'y a pas d'erreurs d'exécution, mais la sortie du programme est complètement différente. Je suis assez terrible avec GDB donc je suis et j'ai besoin de soumettre ce projet avant minuit ce soir pour l'école. Est-ce que quelqu'un pourrait suggérer des choses qui viennent à l'esprit qui pourraient causer cela? Peut-être quelques différences connues entre ces deux compilateurs qui pourraient me donner un endroit pour regarder? Je me rends compte que c'est très vague, j'essaie d'apprendre à utiliser gdb afin que je puisse comprendre ce qui se passe.Problèmes d'exécution dans GCC 4.4.5 sur RedHat, mais fonctionne correctement sur Apple llvm 4.2?

+1

Recevez-vous des avertissements de compilateur? – Pubby

+3

Si la sortie du programme n'est pas la même, il est très probable que vous utilisiez la langue de manière incorrecte et que vous causiez un comportement indéfini. Il est très peu probable que ce soit une différence dans les compilateurs. Avez-vous initialisé toutes les variables avant utilisation? Est-ce que vous allouez et utilisez la mémoire correctement dans les limites. Les variables dans la fonction sont-elles initialisées aux valeurs par défaut? –

+0

Les deux compilent-ils 64 bits? Avez-vous essayé l'analyseur statique? –

Répondre

1

Pour résoudre ce problème, je suis passé par la liste de contrôle proposée par @AdrianCornish.

« Si la sortie du programme ne sont pas les mêmes, alors il est très probable que vous vous détournez la langue et causeraient un comportement non défini Il est Vous avez probablement initialisé toutes les variables avant l'utilisation? Allouez-vous et utilisez-vous la mémoire correctement dans les limites.Les variables de la fonction sont-elles initialisées aux valeurs par défaut? " - Par Adrian Cornish

J'ai découvert qu'il y avait une variable entière que j'avais oublié d'initialiser à zéro dans mon constructeur. Apparemment, le llvm initialisera automatiquement les variables à zéro, contrairement à gcc.

+0

Content que tu l'aies trouvé :-) –

1

Comme trouvé par @weezbizzle - les compilateurs se comportent différemment et un par défaut initialise les variables membres.

Questions connexes