将uint8_t传递给另一个viewController EXC_BAD_ACCESS

时间:2015-01-27 15:07:01

标签: ios objective-c xcode uint8t

我正在使用AVFoundation以kCVPixelFormatType_420YpCbCr8BiPlanarFullRange格式从相机拍摄静止图像。我从缓冲区获取所有数据,我想将它传递给另一个视图控制器。

我有uint8_t *yBuffer;并且我将此指针传递给当前控制器的委托方法(didCaptureImage:withYBuffer:)

另一个控制器将其变量uint8_t *YBuffer设置为从代理接收的变量。

问题是在新控制器中复制YBuffer后,我尝试修改数组中的值,它给出了错误EXC_BAD_ACCESS (code=1, address=0x104e40010)

我尝试过调试,在我看来,新控制器中的YBuffer指针存储委托控制器中的YBuffer值,直到代理从内存中释放出来。

在委托发布之前,YBuffer在新控制器中的值:"/87/34/45/76..and so on"

委托发布后YBuffer在新控制器中的值:""它只是空引号。

也许问题是我复制uint8_t数组的方式?请有人指导我正确的方向。感谢

2 个答案:

答案 0 :(得分:0)

uint8_t *必须指向某个地方。它指向哪里?它指出的事情很快就会消失吗?

在对象中存储uint8_t *是非常可疑的,除非它使用malloc分配,并且你有一个正确的setter,free()是前一个值,还有一个dealloc通过setter将指针设置为NULL。

答案 1 :(得分:0)

想出来:

otherController.yBuffer = malloc(inWidth * inHeight  * sizeof(uint8_t) ); //size you want to allocate

memcpy(otherController.yBuffer, yBuffer, inWidth * inHeight  * sizeof(uint8_t)); //copy to target buffer from current buffer, with the size you allocated

完成缓冲后,不需要它:

free(self.cameraViewController.yBuffer);