ios - 'malloc_error_break' 是否发生在与底层内存损坏相同的线程上

标签 ios c multithreading crash malloc

我正在尝试调试我们的 iOS 应用程序中的偶尔崩溃。

我们得到“malloc_error_break”和通常的“对象在被释放后被修改”。 崩溃发生在同一个 C 库中,但在不同的 malloc 位置。

回溯的顶部看起来像这样:

* thread #29: tid = 0x3a03, 0x32c8cfa8 libsystem_c.dylib`malloc_error_break, stop reason = breakpoint 1.1
    frame #0: 0x32c8cfa8 libsystem_c.dylib`malloc_error_break
    frame #1: 0x32c71ed0 libsystem_c.dylib`szone_error + 220
    frame #2: 0x32c71f1c libsystem_c.dylib`free_list_checksum_botch + 28
    frame #3: 0x32c1d3bc libsystem_c.dylib`tiny_malloc_from_free_list + 348
    frame #4: 0x32c1c44a libsystem_c.dylib`szone_malloc_should_clear + 1274
    frame #5: 0x32c1bf1e libsystem_c.dylib`malloc_zone_malloc + 66

问题:

这是否保证底层内存损坏(例如双重释放等)发生在与“malloc_zone_malloc”相同的线程上?或者至少 malloc_error_break 所指的内存是在同一个线程上分配的?

肯定知道这一点,将帮助我将崩溃与其他库、NSURLConnection 请求等的影响隔离开来。该应用程序非常大,而且很难调试,因为它是。

编辑:

我想我首先想知道的是更简单的东西。

不同的线程在 iOS 中是否有单独的堆/malloc 列表?

最佳答案

malloc_error_break() 一旦发现内存损坏就会被调用,无论哪个线程碰巧发现它。绝对不能保证这将是哪个线程。

Do different threads have separate heaps / malloc lists in iOS?

没有。您的进程中的所有线程都使用一个共享堆。

关于ios - 'malloc_error_break' 是否发生在与底层内存损坏相同的线程上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15286016/

相关文章:

ios - 推送通知在 TabBarController 中打开特定屏幕 NavigationController RevealViewController

c - 与版本化字符串数据一起工作的数据结构?

反问题(C程序)

C代码pthread信号量程序,具有3个线程,按顺序打印

c# - 使用静态方法还是实例化类?

ios - 在 Swift 中使用 Objective-C block 时保留参数类型

ios - 推送后如何将用户带到选定的索引

ios - UIView动画完成回调?

c - 为什么我的函数没有真正初始化数组?

java - 如何确保使用 Hibernate 更新的值在我阅读后没有被更改?