0

我使用 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数组的方式?请有人指导我正确的方向。谢谢

4

2 回答 2

0

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

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

于 2015-01-27T15:30:51.317 回答
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);
于 2015-01-31T15:47:48.320 回答