gpt4 book ai didi

objective-c - iOS 和 OpenCV : debug malloc_error_break on device

转载 作者:行者123 更新时间:2023-11-28 17:36:15 25 4
gpt4 key购买 nike

我在使用我的应用程序(在 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);

使用这段代码,我限制了内存分配

Instruments With No Copy

如果我把它改成

NSData *data = [NSData dataWithBytes:cvMat.data
length:(cvMat.elemSize() * cvMat.total())];
CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);

我有一些奇怪的东西,看起来像 AutoReleasePool

Instruments With Copy

错误可能是由于自动释放代码中的对象之一造成的吗?

*方法取自 Robin Summerhill

最佳答案

网络服务人员,

您的数据正在被自动释放池释放释放。 CGDataProviderCreateWithCFData() 似乎没有保留您的数据项。更改此行为的最简单方法是使用 init 表单创建 data。如:

int *dataBytes = malloc(20);
NSData *data = [[NSData alloc] initWithBytesNoCopy:dataBytes
length:20
freeWhenDone:YES];

CGDataProviderRef provider = CGDataProviderCreateWithCFData((__bridge_retained CFDataRef)data);

当您最终释放provider时,您可能还必须释放CFData(但我对此表示怀疑)。

安德鲁

关于objective-c - iOS 和 OpenCV : debug malloc_error_break on device,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9741344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com