Я получил эту ошибку при использовании моего приложения (под 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
Инструменты с копией
Может ли ошибка быть вызвана автоматическим выпуском одного из объектов в коде?
* метод взят от Робина Саммерхилла