C++ 使用 getline() 打印:被释放的指针未在 XCode 中分配
Posted
技术标签:
【中文标题】C++ 使用 getline() 打印:被释放的指针未在 XCode 中分配【英文标题】:C++ using getline() prints: pointer being freed was not allocated in XCode 【发布时间】:2011-01-15 03:04:09 【问题描述】:我正在尝试使用 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;
在每个单词之前我都会收到此错误。从 cmets 看来,这似乎是 OSX/XCode 特定的错误。有什么提示吗?
更新: 该错误仅在调试模式下打印。如果我在发布模式下构建此代码,一切都很好。
更新 2: 更多关于该问题的信息可以在here找到。
解决方案:
设置
_GLIBCXX_FULLY_DYNAMIC_STRING=1
在目标信息构建选项卡中的预处理器宏中。
系统信息:
OSX 10.6.2 | XCode 3.2 | g++ 4.2 | i386 的调试配置
【问题讨论】:
它在我的机器上运行良好。虽然我没有使用 MacBook,所以这可能与它有关,但在带有 VS2008 的 XP 上,它编译并运行良好。 同样,它在我的 PPC Powerbook 上编译和运行也没有错误。带有 g++ 4.0.1 的 Mac OS 10.4。而且看起来不错…… 我也可以在 Visual Studio 2008 下编译并运行良好。 在我的 10.5.8 g++ 4.0.1 的 MacBook Pro 上运行良好,valgrind 也没有报告任何可疑情况。 @dan:看起来你的设置可能有点不靠谱。在新的终端中使用终端g++
尝试它,然后考虑重新启动,然后考虑重新安装开发者工具。
【参考方案1】:
至少有一个人报告了 Apple 上 g++ 4.2.1 的问题,这似乎与您的问题有关,这与使用 _GLIBCXX_FULLY_DYNAMIC_STRING
定义的标准库配置不当有关(我不了解我的任何内容)我在这里打字)。
您可能会从包含此消息的新闻组线程中获得一些线索:
http://gcc.gnu.org/ml/gcc-bugs/2009-10/msg00807.html【讨论】:
就是这样。我重现了该问题并通过将_GLIBCXX_FULLY_DYNAMIC_STRING
添加到目标设置窗口来修复它。 (不要将它添加到 Project 设置窗口的“预处理”部分;那什么都不做。XCode,grrrrr...)
由于这是一个团队的努力,有人愿意报告错误吗?以上是关于C++ 使用 getline() 打印:被释放的指针未在 XCode 中分配的主要内容,如果未能解决你的问题,请参考以下文章
C++:将 ifstream 与 getline() 一起使用;