10

我正在尝试使用 std:getline() 但得到一个奇怪的运行时错误:

malloc:* 对象 0x10000a720 的错误:未分配被释放的指针 *在 malloc_error_break 中设置断点以进行调试

这是产生此错误的代码:

//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 的调试配置

4

1 回答 1

10

至少有一个人报告了 Apple 上 g++ 4.2.1 的问题,这似乎与您的问题有关,这与您对具有_GLIBCXX_FULLY_DYNAMIC_STRING定义的标准库的不正确配置有关(并不是说我理解我在这里输入的任何内容)。

您可能会从包含此消息的新闻组线程中获得一些线索:

于 2010-02-10T06:47:39.947 回答