C++使用getline()打印:在XCode中未分配的指针被释放

10

我正在尝试使用std:getline(),但是遇到了奇怪的运行时错误:

malloc: * error for object 0x10000a720: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug

以下代码导致了这个错误:

//main.cpp
#include <iostream>
#include <sstream>

int main (int argc, char * const argv[])
{
   std::istringstream my_str("demo string with spaces");
   std::string word;

   while (std::getline(my_str, word, ' ')) {
        std::cout << word << std::endl;
   }
   return 0;
}

在每个单词之前,我遇到了这个错误。从评论中看来,这似乎是一种针对OSX/XCode的特定错误。有什么提示吗?

更新: 该错误仅在调试模式下打印。如果我在发布模式下构建此代码,则一切正常。

更新2: 有关该问题的更多信息可以在此处找到。

解决方案:

在您的目标信息生成选项卡的预处理器宏中设置

_GLIBCXX_FULLY_DYNAMIC_STRING=1

系统信息:

OSX 10.6.2 | XCode 3.2 | g++ 4.2 | i386 的调试配置


1
它在我的电脑上正常运行。但我并没有使用MacBook,所以这可能与此有关。不过在XP系统上,配合VS2008编译和运行都很正常。 - ihtkwot
1
同样地,它在我的 PPC Powerbook 上编译和运行没有错误。Mac OS 10.4,使用 g++ 4.0.1。而且它看起来没问题... - dmckee --- ex-moderator kitten
在我的电脑上,使用Visual Studio 2008编译和运行都很好。 - Scott Smith
在我的MacBook Pro上,使用10.5.8 g++ 4.0.1,一切都很正常,而且valgrind也没有报告任何可疑的情况。 - Michael Anderson
1
@dan:看起来你的设置可能有些问题。尝试在新终端中使用g++命令,然后考虑重新启动计算机,最后考虑重新安装开发工具。 - dmckee --- ex-moderator kitten
显示剩余4条评论
1个回答

10

有至少一位用户报告了与您类似的问题,可能与在苹果上使用g++ 4.2.1时标准库配置不当有关,具体涉及到_GLIBCXX_FULLY_DYNAMIC_STRING定义(虽然我并不理解我在打什么字)。

您可以在包含此消息的新闻组帖子中获取一些线索:


这就是答案。我通过将 _GLIBCXX_FULLY_DYNAMIC_STRING 添加到目标设置窗口中来重现并修复了该问题。(不要将其添加到“预处理”部分的项目设置窗口中;那没用。XCode,呜呜呜...) - Potatoswatter
由于这是一个团队合作,有人想报告一个错误吗? - Potatoswatter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接