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];