Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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应用程序中的EXC\u错误\u访问内核\u无效\u地址_Ios_Objective C_Avfoundation - Fatal编程技术网

我的ios应用程序中的EXC\u错误\u访问内核\u无效\u地址

我的ios应用程序中的EXC\u错误\u访问内核\u无效\u地址,ios,objective-c,avfoundation,Ios,Objective C,Avfoundation,我正在我的ios应用程序中录制一些视频,有时(非常不可预测)它会在录制时因EXC_BAD_ACCESS KERN_INVALID_ADDRESS而崩溃。(编辑:项目正在使用圆弧) 我的变量声明: @interface CameraController () <AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate> { AVCaptureSession

我正在我的ios应用程序中录制一些视频,有时(非常不可预测)它会在录制时因EXC_BAD_ACCESS KERN_INVALID_ADDRESS而崩溃。(编辑:项目正在使用圆弧)

我的变量声明:

@interface CameraController  () <AVCaptureVideoDataOutputSampleBufferDelegate,    AVCaptureAudioDataOutputSampleBufferDelegate>
{
AVCaptureSession* _session;
AVCaptureVideoPreviewLayer* _preview;
dispatch_queue_t _captureQueue;
AVCaptureConnection* _audioConnection;
AVCaptureConnection* _videoConnection;


Encoder* _encoder;
BOOL _isRecording;
BOOL _isPaused;
BOOL _discont;
int _currentFile;
CMTime _timeOffset;
CMTime _lastVideo;
CMTime _lastAudio;

int _cx;
int _cy;
int _channels;
Float64 _samplerate;  
}
@end
有关完整使用的代码,请参阅:-我已将此控件用于视频录制。
我知道很难帮助解决此类问题,但我应该从哪里开始调试此问题?感谢您对您的方法的任何帮助,您有以下几点

CFRetain(sampleBuffer);

if (_timeOffset.value > 0)
{
    CFRelease(sampleBuffer);
    sampleBuffer = [self adjustTime:sampleBuffer by:_timeOffset];
}
最后你会有另一个

CFRelease(sampleBuffer);

\u timeOffset.value
大于0的情况下,您不是过度释放了吗?或者您正在其他地方执行
保留
?您是否应该在
if
块中再次保留它?

谷歌“如何调试EXC\u BAD\u访问”,您将发现大量资源,例如编码器.m的第129行?您可能正在引用已解除分配的对象。(objc_uumsgsend错误的常见原因。)//pss帧到编码器[_encoderencodeframe:sampleBuffer isVideo:bVideo]//这是第129行CFRelease(sampleBuffer);编码器的声明/范围是什么?如果它是属性的支持变量,请尝试将引用更改为
self.encoder
style。否则,我会运行工具来查看对象的分配生命周期。(可能先在启用僵尸的情况下运行应用程序,以完全确定这是问题对象。)抱歉,范围不清楚。我已经更新了我的代码。谢谢不,我没有被留到别的地方。可能是它导致了这个问题。我添加了CFRetain(sampleBuffer);在if块的末尾。谢谢suggestion@martin让我们知道,如果它真的修复了我当然会,我已经在我的代码中做了更改,我需要正确地测试它。麦克斯,有一天我会让你知道的。谢谢你的帮助和关心
CFRetain(sampleBuffer);

if (_timeOffset.value > 0)
{
    CFRelease(sampleBuffer);
    sampleBuffer = [self adjustTime:sampleBuffer by:_timeOffset];
}
CFRelease(sampleBuffer);