我的ios应用程序中的EXC\u错误\u访问内核\u无效\u地址
我正在我的ios应用程序中录制一些视频,有时(非常不可预测)它会在录制时因EXC_BAD_ACCESS KERN_INVALID_ADDRESS而崩溃。(编辑:项目正在使用圆弧) 我的变量声明:我的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
@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);