【问题标题】:boost::shared_ptr deleter never called iOS simulatorboost::shared_ptr 删除器从未调用过 iOS 模拟器
【发布时间】:2015-09-18 08:38:37
【问题描述】:

我们在一个工作区中有一个带有 2 个项目的 iOS 应用程序。 我们有一个奇怪的内存泄漏: 如果我们在第二个项目中使用删除器创建 boost::shared_ptr 并在模拟器上启动应用程序 - 删除器永远不会被调用。 设备上的相同代码可以正常工作。 从主项目调用的相同代码 - 在模拟器上正常工作。

有谁知道如何处理这个问题?我会很感激任何想法。

项目 v1.55 中的 PS boost 版本,对于 boost 构建,请使用 https://github.com/mgrebenets/boost-xcode5-iosx 的修改版本

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

【问题讨论】:

标签: ios boost memory-leaks ios-simulator


【解决方案1】:

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

  1. 移至 Xcode 7.0

  2. 根据http://www.openradar.me/21724015,使用“-mios-version-min=7.0”重建提升

并且内存泄漏消失了。

【讨论】:

    【解决方案2】:

    PPS:

    你让它看起来像

    #include <boost/shared_ptr.hpp>
    
    int main()
    {
        boost::shared_ptr sp( new int[10], []( int *p ) { printf("Deleted\n"); delete[] p; } );
    }
    

    会出现问题(您尝试过吗?)。

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

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

    【讨论】:

    • 在主项目中一切正常:我可以看到日志输出并且 Instrument 没有内存泄漏。形成第二个项目我没有看到日志,可以在 Instruments 中看到这个地方的泄漏。
    • 也许你需要更好的语言来表达实际发生的事情。而不是“第二个项目”——那是一个什么样的项目?它的什么特性使它不是第一个项目?为什么会有“第二个”项目?你如何开始它?什么开始呢? IOW:调试你自己的问题。请参阅上面的链接。
    • 我的英语不好这是真的。我应该改进它。这不是我的问题的主题,但无论如何感谢您的帮助。
    • @TinaZh 我不是在说你的英语!我说的是您使用的术语。我准确地解释了我的意思。例如,它不是“第一个项目”,而是“列表中第一个项目”或“最旧的项目”或“标记为 startup-project 的项目”或“该项目是先于另一个开始”。然后第二个项目是“库依赖项”或“客户端进程”或“单元测试容器”或“子项目”。 IOW:你必须准确。如果您/不知道/项目之间的区别,找出。在 ... 中打开工作区文件
    • ... 文本编辑器。看看这两个项目之间存在哪些差异。另请参阅:Nobody writes testcases anymoreSolve your problem by almost asking a question on StackOverflow
    【解决方案3】:

    是的,从 Xcode 7 开始,您需要使用目标系统 min 来构建它。

    我已经在这里预建了一个库: https://github.com/danoli3/ofxiOSBoost

    • 目前有 arm64、armv7、i386、x86_64 Boost 1.59.0 libc++
    • 脚本自己构建(所以如果你需要 libstdc++ 很容易 重建)

    支持 Xcode 7

    ofxiOSBoost

    https://github.com/danoli3/ofxiOSBoost

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      • 2016-09-04
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      相关资源
      最近更新 更多