【问题标题】:NSMutableDictionary with two keys pointing to same object causing "double free" exceptionNSMutableDictionary 有两个指向同一个对象的键导致“双释放”异常
【发布时间】:2013-06-07 00:24:26
【问题描述】:

所以我正在尝试制作一个包含对象的字典,每个对象都有两个指向它们的键。我已经写了这个块来设置对象:

ALAssetsGroupEnumerationResultsBlock resultsBlock = ^(ALAsset *result, NSUInteger index, BOOL *stop)
    {
        if(result)
        {
            NSIndexPath *path = [NSIndexPath indexPathWithGroupIndex:groupIndex andAssetIndex:index];

            [assetsDictionary setObject:result forKey:path];
            [assetsDictionary setObject:result forKey:result.defaultRepresentation.url];
        }
    };

这是导致此异常的原因:

malloc: * 对象 0x1f8c1200 错误:未分配指针被释放

关于如何解决这个问题,或者以这种方式实现字典的更好方法有什么想法吗?

【问题讨论】:

  • 把同一个对象放到同一个字典里,多个key下没有错。鉴于您显示的代码似乎没有错。你有什么证据表明在字典中设置结果是罪魁祸首?
  • 当一个对象被放入字典时,它被保留,当字典被释放时,对象也是如此。所以他们是平衡的。其他一些对象过度释放它,它只是在字典释放你发现它的时候。
  • 你们完全正确。问题实际上是 assetsDictionary 是在一个 NSOperationBlock 中完成的,并且有 10 个块同时进行,所以我认为这是由于同时改变了不同线程上的内容。

标签: ios exception malloc nsmutabledictionary


【解决方案1】:

我想通了,这根本不是我想的那样。问题是由于同时在不同线程上改变字典的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2023-02-15
    • 1970-01-01
    • 2021-12-10
    • 2021-01-25
    • 2015-02-18
    • 1970-01-01
    相关资源
    最近更新 更多