Строка Xcode 3.2.1 и C ++ не работает! - PullRequest
4 голосов
/ 22 октября 2009

В Xcode 3.2.1 на Mac OS X Snow Leopard я открываю проект под: Инструмент командной строки типа C ++ stdc ++. У меня есть следующий простой код:

#include <iostream>
#include <string>

using namespace std;

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

Программа прекрасно компилируется и выдает запрос "Enter Something". Когда я набираю что-то, а затем нажимаю ввод, я получаю следующую ошибку:

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) 

При компиляции в более ранней версии XCode (3.1.2) на другом компьютере (открыл проект с параметром 'утилиты командной строки', которого нет в 3.2.1), код выполняется без НЕТ ПРОБЛЕМЫ

Кто-нибудь знает, что происходит? Спасибо, Юваль

Ответы [ 2 ]

8 голосов
/ 22 октября 2009

Насколько я могу судить, я не испытываю этой проблемы в режиме выпуска для x86_64. Но я вижу проблему в Debug x86_64. Если я буду следовать указаниям , данным Говардом в этом посте , я смогу запустить его в режиме отладки:

  1. Проект -> Изменить активную цель ...
  2. Щелкните по вкладке Build
  3. Поиск "препроцессор"
  4. Удалить _GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

Постройте и запустите, вы заметите, что это работает. Еще одно интересное наблюдение заключается в том, что использование __gnu_debug::string (из заголовка <debug/string>) само по себе не вызывает ошибку.

РЕДАКТИРОВАТЬ: изо рта лошади ( известные проблемы в XCode 3.2.1 )

Компилятор gcc 4.2 по умолчанию не совместим со стандартным режимом отладки библиотеки C ++. Программы на C ++, скомпилированные с Xcode 3.2, могут не работать в конфигурации Debug. Чтобы исправить это, установите версию компилятора на 4.0 или отредактируйте макросы препроцессора конфигурации отладки и удалите записи: _GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1

Вы можете сделать это для всех проектов, перейдя к /Developer/Library/Xcode/Project Templates/Application/Command Line Tool/C++ Tool/C++Tool.xcodeproj/ и отредактировав project.pbxproj и удалив линии вокруг строки 138:

"_GLIBCXX_DEBUG=1",
"_GLIBCXX_DEBUG_PEDANTIC=1",
2 голосов
/ 19 декабря 2009

Более простой способ сделать то же самое: вставить эти строки в самом начале вашей программы (до любых операторов #include):

#define _GLIBCXX_FULLY_DYNAMIC_STRING 1
#undef _GLIBCXX_DEBUG
#undef _GLIBCXX_DEBUG_PEDANTIC

Очевидно, что это повлияет только на текущий проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...