将64位切片添加到iOS应用程序会导致崩溃

时间:2015-03-06 15:28:35

标签: c++ ios memory boost 64-bit

我目前正在移植一个仅支持32位拱门的应用程序,以支持64位拱门,正如Apple自2月1日起所要求的那样。

现在,只需将arm64添加到有效的体系结构中,就会在boost::format相关代码上出现奇怪的双重自由错误。我收到以下错误消息:

malloc: *** error for object 0x1703eaa00: Freeing already free'd pointer

在以下代码中发生:

std::string ExceptionHelper::generateDebugTrace(const std::exception& exception, 
                                                size_t indent) {
    boost::format innerMessage("Thrown: %3%\n%1%Type: %2%\n");
    innerMessage % std::string(indent + ExceptionHelper::log_indent_size, ' ');
    innerMessage % boost::units::detail::demangle(typeid(exception).name());
    innerMessage % exception.what();
    return innerMessage.str();
}//Happens when exiting scope

在最后一行,即退出函数的范围时,似乎与boost::io::basic_altstringbuf释放有关。

我尝试从对象中获取信息被双重释放(使用lldb print命令),但由于它在至少一个空闲后中断,我使用此命令没有任何意义。

由于Enable Malloc Guard在设备上运行应用程序时不可用(我无法在模拟器中运行),我真的不知道如何调试此错误并确切知道是什么原因造成的双删除。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题来自该方法 virtual const char* what() const throw() 被覆盖并返回本地字符串变量的c_str()。

奇怪的是,这段代码在运行2年后以32位运行,但每次运行时都会以64位运行。