Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 免费冲撞_Ios_C_Crash_Crt - Fatal编程技术网

Ios 免费冲撞

Ios 免费冲撞,ios,c,crash,crt,Ios,C,Crash,Crt,我有几个来自iOS应用程序的崩溃报告,这些报告源于free()调用中的SIGABRT 调用堆栈是一致的: 0 libsystem_kernel.dylib 0x3863c1f0 __pthread_kill + 8 1 libsystem_c.dylib 0x385ecfdd abort + 77 2 libsystem_malloc.dylib 0x38664d67 free + 383 我试

我有几个来自iOS应用程序的崩溃报告,这些报告源于free()调用中的SIGABRT

调用堆栈是一致的:

0   libsystem_kernel.dylib              0x3863c1f0 __pthread_kill + 8
1   libsystem_c.dylib                   0x385ecfdd abort + 77
2   libsystem_malloc.dylib              0x38664d67 free + 383
我试图得到更多的诊断,但在此期间,有人遇到过同样的情况吗?什么样的错误参数会使free()调用崩溃?我可以看到几个选项:

  • 空指针
    (实际上是合法的)
  • 数据区指针(即字符串文字)
  • 堆栈指针
  • 垃圾指针(即未初始化的指针)
  • 已释放的堆指针
有什么想法吗?这是非常罕见的,最后一次是在九月
“14.但我总共有10多个,那里可能有一个bug。

如果我正确读取堆栈转储,代码会在
free
中触发一个断言,并调用
abort
。查看上libsystem_malloc的源代码,并尝试找出哪个断言失败

你有一个迷路的指针,猜测它隐藏在哪里,以避免一次不可再现的崩溃几乎是不可能的。使用valgrind在emulator中运行应用程序(如果可能的话)可能有助于跟踪内存滥用


如果堆栈转储的长度超过3行,则应该有一个指示,说明是哪个调用
free
导致了问题。它可能有助于跟踪错误,但也可能是一些早期指针误用的后期副作用。

其他值也会导致问题,很多非空指针以前没有由
malloc
calloc
realloc
返回,或者已经由
free
realloc
释放。使用valgrind尝试定位问题。它来自用户电话,我不知道如何重现它。如果我可以复制,我就不会问这个问题:)我将首先检查您的代码并将所有C/C++指针初始化为0(NULL)。如果释放了任何内容,请将指针设置为0。检查所有执行删除(C++)或释放(C)的代码。检查您写入的任何数组,以确保您不会走到末尾。尝试释放()没有适当分配项的指针时会引发错误。很可能是未初始化的指针或已释放但未设置回0的指针,或者某个对象意外地经过并损坏了有效指针。既然你不能重新创建它,你就无能为力了。请问free()在源代码中的什么位置?是苹果内存分配器的来源。我不确定是否在iOS中使用。找到
free
的源代码,如果找不到传递的指针所在的区域,您将看到它调用
abort
。这稍微缩小了错误范围:它不可能是已经释放的指针,也不可能是分配数据块中的指针。
NULL
检查是C标准强制执行的。调用
free(NULL)
完全可以。顺便说一下,C++中的代码>删除< /代码>空指针也是可以的。