将 uint8_t 传递给另一个 viewController EXC_BAD_ACCESS
Passing uint8_t to another viewController EXC_BAD_ACCESS
我正在使用 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
数组的方式?请有人指导我正确的方向。谢谢
A uint8_t* 必须指向某处。它指向哪里?它指向的东西很快就会消失吗?
在一个对象中存储一个 uint8_t* 是非常可疑的,除非它是用 malloc 分配的并且你有一个适当的 setter free() 的前一个值,以及一个设置的 dealloc通过 setter 指向 NULL 的指针。
想通了:
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);
我正在使用 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
数组的方式?请有人指导我正确的方向。谢谢
A uint8_t* 必须指向某处。它指向哪里?它指向的东西很快就会消失吗?
在一个对象中存储一个 uint8_t* 是非常可疑的,除非它是用 malloc 分配的并且你有一个适当的 setter free() 的前一个值,以及一个设置的 dealloc通过 setter 指向 NULL 的指针。
想通了:
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);