我目前正在移植一个仅支持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
在设备上运行应用程序时不可用(我无法在模拟器中运行),我真的不知道如何调试此错误并确切知道是什么原因造成的双删除。
有什么想法吗?
答案 0 :(得分:0)
问题来自该方法
virtual const char* what() const throw()
被覆盖并返回本地字符串变量的c_str()。
奇怪的是,这段代码在运行2年后以32位运行,但每次运行时都会以64位运行。