Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.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 Swift中的Malloc错误_Ios_Swift - Fatal编程技术网

Ios Swift中的Malloc错误

Ios Swift中的Malloc错误,ios,swift,Ios,Swift,我的代码中突然出现奇怪的Malloc错误,例如: malloc: *** error for object 0x7fbdc8daa2f8: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug 当我设置断点时,它们似乎是随机的,只是出现在不同的地方。我使用的是XCode 8.

我的代码中突然出现奇怪的Malloc错误,例如:

malloc: *** error for object 0x7fbdc8daa2f8: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
当我设置断点时,它们似乎是随机的,只是出现在不同的地方。我使用的是XCode 8.1。Swift 3.0。有人见过这个吗

我设置了断点,得到如下结果:

libsystem_malloc.dylib`malloc_error_break:
->  0x112fa4760 <+0>:  pushq  %rbp
    0x112fa4761 <+1>:  movq   %rsp, %rbp
    0x112fa4764 <+4>:  nop    
    0x112fa4765 <+5>:  nopl   (%rax)
    0x112fa4769 <+9>:  popq   %rbp
    0x112fa476a <+10>: retq   
libsystem\u malloc.dylib`malloc\u error\u break:
->0x112fa4760:pushq%rbp
0x112fa4761:movq%rsp,%rbp
0x112fa4764:nop
0x112fa4765:nopl(%rax)
0x112fa4769:popq%rbp
0x112fa476a:retq

此错误最常见的原因是线程冲突。例如,如果一个线程对一个对象执行最终发布并开始取消分配,然后另一个线程对该对象具有
无主
(Swift)或
分配
(ObjC)引用,则会对其进行修改,这将触发此错误。(如果所有引用都是
,则不可能出现此错误,因为在前一种情况下对象不可能被释放,而在后一种情况下
引用是线程安全的。)


当然,这有可能暴露了最新SDK中的一个bug(因此您应该打开一个雷达),但更典型的是,时间的变化导致代码中出现了一个bug。如前所述,您应该在
malloc\u error\u break
上设置一个符号断点,以找出有问题的对象。

此错误最常见的原因是线程冲突。例如,如果一个线程对一个对象执行最终发布并开始取消分配,然后另一个线程对该对象具有
无主
(Swift)或
分配
(ObjC)引用,则会对其进行修改,这将触发此错误。(如果所有引用都是
,则不可能出现此错误,因为在前一种情况下对象不可能被释放,而在后一种情况下
引用是线程安全的。)


当然,这有可能暴露了最新SDK中的一个bug(因此您应该打开一个雷达),但更典型的是,时间的变化导致代码中出现了一个bug。如前所述,您应该在
malloc\u error\u break
上设置一个符号断点,以找出有问题的对象。

这是由于两次释放对象或释放从未分配的指针,或通过先前指向已释放对象的无效指针写入


尝试
Product>Scheme>Edit Scheme
,并在
Diagnostics
选项卡下启用所有
Malloc
设置和
Guard Malloc
(此选项仅在模拟器中可用)

这是由于两次释放对象,或释放从未分配的指针,或通过先前指向已释放对象的无效指针进行写入


尝试
Product>Scheme>Edit Scheme
,并在
Diagnostics
选项卡下启用所有
Malloc
设置和
Guard Malloc
(此选项仅在模拟器中可用)

如何设置此断点?我是否在崩溃后代码中标记出现的位置设置它?它是一个符号断点。在断点选项卡中,单击“+”并选择“符号断点”。它会在调用该名称的函数时激发。正确;这就是消息“***在malloc\u error\u break to debug中设置断点”告诉您的。设置断点后,我在上面的问题中发布了结果。不确定这是什么意思..您可能仍然有一个堆栈跟踪,显示对象在什么位置被释放。这通常会提示对象是什么(您可以选择不同的堆栈帧进行探索)<代码>malloc\u error\u break
本身不做任何事情;它只是一个放置断点的地方。当然,您还应该审核可能有无主引用的任何位置,并确保这些对象没有在多个线程上操作。如何设置此断点?我是否在崩溃后代码中标记出现的位置设置它?它是一个符号断点。在断点选项卡中,单击“+”并选择“符号断点”。它会在调用该名称的函数时激发。正确;这就是消息“***在malloc\u error\u break to debug中设置断点”告诉您的。设置断点后,我在上面的问题中发布了结果。不确定这是什么意思..您可能仍然有一个堆栈跟踪,显示对象在什么位置被释放。这通常会提示对象是什么(您可以选择不同的堆栈帧进行探索)<代码>malloc\u error\u break
本身不做任何事情;它只是一个放置断点的地方。当然,您还应该审核可能有无主引用的任何位置,并确保这些对象没有在多个线程上操作。