boost::shared_ptr deleter从未调用iOS模拟器

boost::shared_ptr deleter从未调用iOS模拟器,ios,boost,memory-leaks,ios-simulator,Ios,Boost,Memory Leaks,Ios Simulator,我们有一个iOS应用程序,在一个工作区中有两个项目。 我们有一个奇怪的记忆泄漏: 如果我们在第二个项目中使用deleter创建boost::shared_ptr并在模拟器上启动应用程序,那么deleter永远不会被调用。 设备上的相同代码工作正常。 从主项目调用相同的代码-在模拟器上正确工作 有人知道如何处理这个问题吗?如果有任何想法,我将不胜感激 project v1.55中的PS boost版本,对于boost构建,请使用 PPS是否能更好地解释这种情况:我们已经用许多代码多次检查过这种情况

我们有一个iOS应用程序,在一个工作区中有两个项目。 我们有一个奇怪的记忆泄漏: 如果我们在第二个项目中使用deleter创建boost::shared_ptr并在模拟器上启动应用程序,那么deleter永远不会被调用。 设备上的相同代码工作正常。 从主项目调用相同的代码-在模拟器上正确工作

有人知道如何处理这个问题吗?如果有任何想法,我将不胜感激

project v1.55中的PS boost版本,对于boost构建,请使用

PPS是否能更好地解释这种情况:我们已经用许多代码多次检查过这种情况。最后的测试是调用boost::shared_ptr sp(newint[10],](int*p){printf(“Deleted\n”);delete[]p;});来自项目的不同部分。问题开头描述的结果行为。

PPS:

你让它看起来像

#include <boost/shared_ptr.hpp>

int main()
{
    boost::shared_ptr sp( new int[10], []( int *p ) { printf("Deleted\n"); delete[] p; } );
}
#包括
int main()
{
boost::shared_ptr sp(新的int[10],](int*p){printf(“Deleted\n”);delete[]p;});
}
会出现问题(你试过了吗?)

假设是这种情况,返回的问题是:“你怎么知道它没有被删除?”

很可能,项目只是配置为非控制台类型的可执行文件,或者控制台输出没有显示的其他原因。

回答我自己的问题: 我找到了下一个解决方法:

  • 移动到Xcode 7.0

  • 使用“-mios版本最小值=7.0”重建增压,根据


  • 而且内存泄漏消失了。

    是的,您需要使用自Xcode 7以来最少的目标系统来构建它

    我有一个图书馆,这里已经预建了:

    • 目前有arm64、armv7、i386、x86_64 Boost 1.59.0 libc++
    • 脚本来构建您自己(因此,如果您需要libstdc++,可以很容易地 重建)
    支持Xcode 7

    xiosboost的


    您甚至没有显示相关代码。看,我不知道什么代码将在这里相关。测试调用boost::shared_ptr sp(newint[10],](int*p){printf(“Deleted\n”);delete[]p;});按照问题中的描述工作。您的SSCCE。见和。底线:我们不是通灵者。我真的不知道为什么我应该在这种情况下发布代码,因为我有不同的行为,因为构建,但我已经更新了主项目的问题一切都很好:我可以看到日志输出,没有内存泄漏的仪器。在第二个项目中,我没有看到日志,可以看到仪器中的泄漏。也许你需要更好的语言来说明实际发生的事情。而不是“第二个项目”-这是一个什么样的项目?它的什么特性使它不是第一个项目?你为什么有第二个项目?你是怎么开始的?是什么引起的?IOW:调试您自己的问题。看上面的链接。我的英语不好,这是真的。我应该改进它。这不是我问题的主题,但无论如何,谢谢你的帮助。@TinaZh我不是在说你的英语!我在说你用的术语。我准确地解释了我的意思。例如,它不是“第一个项目”,而是“列表中第一个项目”或“最早的项目”或“标记为启动项目的项目”或“在其他项目之前启动的项目”。然后,第二个项目是“库依赖项”或“客户端进程”或“单元测试容器”或“子项目”。你必须准确。如果你/不知道/这两个项目之间的区别,找出答案。在……中打开工作区文件。。。。。。文本编辑器。看看这两个项目之间有什么不同。另见:和。