Xcode 3.2.1和C ++字符串失败!

时间:2009-10-21 20:10:45

标签: c++ xcode

在Mac OS X Snow Leopard的Xcode 3.2.1中,我打开一个项目: 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;
}

程序编译正常,并提示我“输入内容”。当我输入内容,然后按回车键时,我收到以下错误:

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 个答案:

答案 0 :(得分:8)

据我所知,我在x86_64的发布模式下没有遇到此问题。但我在Debug x86_64中看到了这个问题。如果我按照directions given by Howard in this post,我可以让它在调试模式下运行:

  1. 项目 - &gt;编辑活动目标......
  2. 单击“构建”选项卡
  3. 搜索“预处理器”
  4. 删除_GLIBCXX_DEBUG=1 _GLIBCXX_DEBUG_PEDANTIC=1
  5. 构建并运行,你会发现它有效。另一个有趣的观察是单独使用__gnu_debug::string(来自<debug/string>标题)不会触发错误。

    编辑:来自马口(known issues in XCode 3.2.1

      

    默认的gcc 4.2编译器与标准C ++库调试模式不兼容。使用Xcode 3.2编译的C ++程序可能无法在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",
    

答案 1 :(得分:2)

更简单的方法来完成同样的事情:在程序的最开头粘贴这些行(在任何#include语句之前):

#define _GLIBCXX_FULLY_DYNAMIC_STRING 1
#undef _GLIBCXX_DEBUG
#undef _GLIBCXX_DEBUG_PEDANTIC

显然,这只会影响当前的项目。