boost :: shared_ptr删除器从不调用iOS模拟器

时间:2015-09-18 08:38:37

标签: ios boost memory-leaks ios-simulator

我们在一个工作区中有一个带有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;});来自项目的不同部分。结果行为在问题开头描述。

3 个答案:

答案 0 :(得分:1)

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

  1. 转到Xcode 7.0

  2. 使用" -mios-version-min = 7.0"重建提升。根据{{​​3}}

  3. 内存泄漏消失了。

答案 1 :(得分:0)

PPS:

你看起来像是

#include <boost/shared_ptr.hpp>

int main()
{
    boost::shared_ptr sp( new int[10], []( int *p ) { printf("Deleted\n"); delete[] p; } );
}

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

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

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

答案 2 :(得分:0)

是的,你需要使用Xcode 7以来的目标系统构建它。

我有一个已预先构建的库: https://github.com/danoli3/ofxiOSBoost

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

支持Xcode 7

<强> ofxiOSBoost

https://github.com/danoli3/ofxiOSBoost