Objective c 通过引用传递无符号字符*
嗨!我创建了一个函数来获取图像的灰度版本,但在尝试通过引用传递此函数生成的位的目标时遇到问题:Objective c 通过引用传递无符号字符*,objective-c,c,Objective C,C,嗨!我创建了一个函数来获取图像的灰度版本,但在尝试通过引用传递此函数生成的位的目标时遇到问题: void grayscale (const unsigned char *source, unsigned char **dest, int data_size) { for (int i=0; i < data_size; i= i+4) { int gray = (source[i] + source[i+1] + source[i+2]) / 3;
void grayscale (const unsigned char *source, unsigned char **dest, int data_size) {
for (int i=0; i < data_size; i= i+4) {
int gray = (source[i] + source[i+1] + source[i+2]) / 3;
gray = 255 - (int)cos(source[i])*255;
*dest[i] = (char)gray;
*dest[i + 1] = (char)gray;
*dest[i + 2] = (char)gray; //HERE AN ERROR
*dest[i + 3] = (char)255;
}
}
指针有问题吗?
(我正在研究目标C,我获得了EXC\u BAD\u访问权限)
谢谢你你的电话很好,你的内存被非法访问。调试索引并检查传入的数组的大小,同时检查它是否仍在范围内。很可能i+2超出范围。不清楚为什么要对
dest
使用额外的间接级别,因为*dest
没有被修改,但很可能需要执行以下操作-更改:
*dest[i] = (char)source[i];
*dest[i + 1] = (char)gray;
*dest[i + 2] = (char)gray;
*dest[i + 3] = (char)255;
致:
原因是运算符优先级/关联性
另外,如果看不到调用代码也很难判断,但我猜您可能需要更改:
(*dest)[i] = (char)source[i];
致:
如果您正在尝试将单个平面图像转换为RGBA。什么是
目标
?它有多大?仅仅因为在线路上检测到错误并不意味着它的原因就在那里。请发布一个。我打赌如果你在你的战利品中修改终止条件为I (*dest)[i] = (char)source[i];
(*dest)[i + 1] = (char)gray;
(*dest)[i + 2] = (char)gray;
(*dest)[i + 3] = (char)255;
(*dest)[i] = (char)source[i];
(*dest)[i] = (char)source[i / 4];