【发布时间】:2012-03-16 16:53:23
【问题描述】:
使用我的应用程序时出现此错误(在 ARC 下)
(816,0x2ffe0000) malloc: *** error for object 0xb185010: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
所以我设置了一个 malloc_error_break 断点,并没有得到任何额外的信息到控制台。 我将 bt 添加到控制台并获得
(gdb) bt
#0 0x3635117c in malloc_error_break ()
#1 0x362dd924 in free ()
#2 0x31d64588 in -[NSConcreteData dealloc] ()
#3 0x319a50c4 in _objc_rootRelease ()
#4 0x319a6db6 in objc_release ()
#5 0x319a5e0c in (anonymous namespace)::AutoreleasePoolPage::pop ()
#6 0x319a5d28 in _objc_autoreleasePoolPop ()
#7 0x37e13e8e in _CFAutoreleasePoolPop ()
#8 0x37b818e6 in _dispatch_worker_thread2 ()
#9 0x362e61ce in _pthread_wqthread ()
#10 0x362e60a4 in start_wqthread ()
错误出现在不同的时间,不同的用法,我找不到涉及的代码。 知道如何调试(仅在设备上,我使用 AVCaptureSession)。
编辑
我认为它来自
NSData *data = [NSData dataWithBytesNoCopy:cvMat.data
length:(cvMat.elemSize() * cvMat.total())
freeWhenDone:YES];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
通过这段代码,我限制了内存分配
如果我把它改成
NSData *data = [NSData dataWithBytes:cvMat.data
length:(cvMat.elemSize() * cvMat.total())];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);
我得到了一个看起来像 AutoReleasePool 的奇怪东西
错误可能是由于代码中某个对象的自动释放造成的吗?
*取自 Robin Summerhill 的方法
【问题讨论】:
-
已经看过这些链接了。不幸的是,malloc_error_break 和 NSZombies 无法在设备上运行!
标签: objective-c ios opencv automatic-ref-counting instruments