2009-10-21 8 views
4

Dans Xcode 3.2.1 sous Mac OS X Snow Leopard, j'ouvre un projet sous: Outil de ligne de commande de type C++ stdC++. J'ai le code simple suivant:La chaîne Xcode 3.2.1 et C++ échoue!

#include <iostream> 
#include <string> 

using namespace std; 

int main(){ 
    string myvar; 
     cout << "Enter something: " << endl; 
    cin >> myvar; 
    cout << endl << myvar << endl; 
    return 0; 
} 

Le programme compile bien, et me pousse à "Entrez quelque chose". Quand je tape quelque chose, puis appuyez sur Entrée, je reçois l'erreur suivante:

myproject(766) malloc: *** error for object 0x1000041c0: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
Program received signal: “SIGABRT”. 
sharedlibrary apply-load-rules all 
(gdb) 

Lors de la compilation sur une version antérieure de Xcode (3.1.2) sur un autre ordinateur (ouvert le projet avec la « ligne de commande option de l'utilitaire, qui n'existe pas dans 3.2.1), le code s'exécute avec NO PROBLEM.

Est-ce que quelqu'un sait ce qui se passe? Merci, Yuval

+0

Le deuxième XCode correspond à la mienne, il fonctionne juste - quelle version de XCode avez-vous sur celui avec le problème – Mark

+0

celui avec le problème est la version 3.2.1 –

+0

De Xcode 3.2.1. connect.apple.com/cgi-bin/WebObjects/... dit doit être installé sur Mac OS X 10.6 Snow Leopard et supérieur. Alors, vous voulez vraiment dire Leopard? – Mark

Répondre

8

Pour autant que je peux dire, je ne rencontre pas ce problème en mode de sortie pour x86_64. Mais je vois le problème dans Debug x86_64. Si je suis le directions given by Howard in this post, je suis en mesure de le faire fonctionner en mode débogage:

  1. Project -> Modifier la cible active ...
  2. Cliquez sur Générer onglet
  3. Chercher "préprocesseur"
  4. Supprimer _GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

Créez et exécutez, vous remarquerez que cela fonctionne. Une autre observation intéressante est qu'utiliser __gnu_debug::string (à partir de l'en-tête <debug/string>) seul ne déclenche pas l'erreur.

EDIT: de la bouche des chevaux (known issues in XCode 3.2.1)

The default gcc 4.2 compiler is not compatible with the Standard C++ Library Debug Mode. C++ programs compiled with Xcode 3.2 may not work in the Debug configuration. To fix this, set the Compiler Version to 4.0, or edit the Debug configuration’s Preprocessor Macros and remove the entries: _GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

Vous pouvez le faire pour tous les projets en naviguant /Developer/Library/Xcode/Project Templates/Application/Command Line Tool/C++ Tool/C++Tool.xcodeproj/ et l'édition project.pbxproj et la suppression des lignes autour de la ligne 138:

"_GLIBCXX_DEBUG=1", 
"_GLIBCXX_DEBUG_PEDANTIC=1", 
+0

Méta-commentaire: vous ne faites pas vraiment beaucoup pour faciliter votre débogage. – user7116

+0

cela désactiver complètement le débogage pour le projet? –

+0

En ce qui concerne libstC++, c'est selon le manuel de l'utilisateur de GCC. – user7116

2

Un moyen plus simple d'accomplir la même chose: collez ces lignes au tout début de votre programme (avant toute instruction #include):

#define _GLIBCXX_FULLY_DYNAMIC_STRING 1 
#undef _GLIBCXX_DEBUG 
#undef _GLIBCXX_DEBUG_PEDANTIC 

Évidemment, cela n'affectera que le projet en cours.

+0

merci pour ça! –

Questions connexes