aux = (unsigned char ) (((tab1) << 2 ) + (unsigned int) buffer);
Я предполагаю, что это должно было быть:
aux = (unsigned char *) (((tab1) << 2 ) + (unsigned int) buffer);
255 - это очень маленькое значение или диапазон для указателя ...
Но требуется больше кода, по крайней мере, целая функция плюс соответствующие определения / объявления (что такое «буфер»? Почему он приводится к unsigned int?).
ОБНОВЛЕНИЕ 111206:
Аналогичная вещь, похоже, имеет место с
bmax = resx * resy + (unsigned int) pixel;
Что, вероятно, должно быть:
bmax = resx * resy + (unsigned int*) pixel;
И
aux = (unsigned char *) ((*(tab1) << 2 ) + (unsigned int) buffer);
Что, вероятно, должно быть
aux = (unsigned char) ((*(tab1) << 2 ) + (unsigned int*) buffer);
или
aux = (unsigned char*) ((*(tab1) << 2 ) + (unsigned int) buffer);
Это основная арифметика указателей: это либо pointer := pointer + scalar;
, либо pointer = scalar + pointer;
, но pointer := pointer + pointer;
не имеет смысла. Первый вариант является наиболее вероятным (в противном случае приведения не были бы необходимы).
Не уверен насчет размеров типов, но они должны быть по крайней мере указателями.
Там все еще есть неправильный набор текста:
for (pix = pixel; pix < (unsigned char *) bmax ; pix++) {...}
Пиксель и пиксель - это символ *; bmax - беззнаковое целое; литой воняет. Я бы ожидал что-то вроде:
for (pix = pixel; pix < pixel+bmax ; pix++) {...}
, и, возможно, предел (bmax) следует даже умножить на 4, чтобы освободить место для 24 + 8 бит на цветовое пространство ячейки.