objective-c - 如何在不知道要为该指针分配的大小的情况下将指针参数传递给函数
问题描述
我知道这个问题很菜鸟。我试图了解指针是如何工作的。我学习了 C 的基础知识,但仍然不明白这一点。
鉴于此功能:
+ (void)nv21ToRgbWithWidth:(unsigned int)width height:(unsigned int)height yuyv:(unsigned char *)yuyv rgb:(unsigned char *)rgb
{
const int nv_start = width * height ;
UInt32 i, j, index = 0, rgb_index = 0;
UInt8 y, u, v;
int r, g, b, nv_index = 0;
for(i = 0; i < height ; i++)
{
for(j = 0; j < width; j ++){
//nv_index = (rgb_index / 2 - width / 2 * ((i + 1) / 2)) * 2;
nv_index = i / 2 * width + j - j % 2;
y = yuyv[rgb_index];
u = yuyv[nv_start + nv_index ];
v = yuyv[nv_start + nv_index + 1];
r = y + (140 * (v-128))/100; //r
g = y - (34 * (u-128))/100 - (71 * (v-128))/100; //g
b = y + (177 * (u-128))/100; //b
if(r > 255) r = 255;
if(g > 255) g = 255;
if(b > 255) b = 255;
if(r < 0) r = 0;
if(g < 0) g = 0;
if(b < 0) b = 0;
index = rgb_index % width + (height - i - 1) * width;
rgb[index * 3+0] = b;
rgb[index * 3+1] = g;
rgb[index * 3+2] = r;
rgb_index++;
}
}
}
我怎么知道在传递给函数之前应该如何初始化unsigned char *
for ?rgb
我尝试像这样调用函数:
unsigned char *rgb = NULL;
[MyClass nv21ToRgbWithWidth:imageWidth height:imageHeight yuyv:yuyvValues rgb:rgb];
但是程序在这一行崩溃了:
rgb[index * 3+0] = b;
我看到rgb
是用 NULL 初始化的,所以你不能赋值。因此,我想到了初始化一个数组并将其传递给指针 rgb,如下所示:
unsigned char rgbArr[10000];
unsigned char *rgb = rgbArr;
但该功能仍然崩溃。我真的不知道我应该如何rgb
在这个函数中传递参数。请帮助我理解这一点。
解决方案
以字节为单位的预期大小似乎至少为height*width*3
; 将这样的数组分配为局部变量(如您使用unsigned char rgbArr[10000]
)可能会超出堆栈限制;在这种情况下,程序可能会崩溃。我会尝试使用堆代替:
unsigned char* rgb = malloc(imageHeight*imageWidth*3);
[MyClass nv21ToRgbWithWidth:imageWidth height:imageHeight yuyv:yuyvValues rgb:rgb];
...
free(rgb);
推荐阅读
- azure-active-directory - 使用 react-adal 为 aad authentiactionn 添加错误页面
- php - 在 MySQLi 查询中使用三元运算符
- javascript - 在 Avatar 组件下方居中社交媒体图标
- google-analytics - 当我仅使用“sourceMedium”或“sourceMedium”+“campaign”维度时,为什么用户数和会话数不同?
- javascript - 是否有推荐/有效的方法来实现具有反应生产的单个文件包?
- node.js - 如何更新 mongo db 中特定数组元素的值
- ios - 显式卸载后无法重新安装 iMessage 扩展程序
- xcode - Xamarin.iOS[13.6.0.12] 可以将 xcode10.2 与 devicesupport sdk13.2 一起使用(来自 xcode11.3)
- python - 通过 PARAFAC 分解对不完全张量进行平滑建模 - Matlab to Python Conversion
- angular - 如何以角度隐藏和取消隐藏元素