>если приведенный фпйгмент получен методом cut&paste,
>то оригинал пашет по памяти ;-)
>---
>вообще - хороший пример !
>(далее тест для всех)
>попробуйте подсчитать кол-во ошибок
>и сравните результат с выводом lint (splint)..
Стопудово пашет. Непонятно, почему в сегфолт не валится, наверное потому что BSIZE слишком маленький...
victorddt, смотри:
char *buffer[BSIZE], mask; Это ты объявил массив из одного указателя на char(который на данный момент указывает хз куда).
act_read=fread(*buffer,1,BSIZE,in); *buffer = *(&buffer[0]) = buffer[0], это ты читаешь данные в ту память, куда указывает твой указатель buffer[0] (а он, как мы помним, указывает хз куда).
Т.е. в лучшем случае ты бесконтрольно перезаписываешь данные своей программы, в худшем ловишь ошибку сегментации.
Если тебе так вперлось столь уродское объявление, то сделай так:
char *buffer[BSIZE], mask;
...
for (int i=0; i<BSIZE; i++) buffer[i]=malloc(BSIZE);
... //Работаем с массивом
printf("%02X\n",(unsigned int)((unsigned char)(*((unsigned char *)buffer[0])))); // Тут изза дураццких указателей приходится воротить огород с приведением типов
for (int i=0; i<BSIZE; i++) free(buffer[i]);
А по людски люди пишут
unsigned char buffer[BSIZE];
...
act_read=fread(buffer,BSIZE,1,in); // Гораздо быстрее читать один блок размером BSIZE, чем BSIZE блоков размером 1 байт, хотя здесь это не важно, ибо BSIZE=1
printf("%02X\n",(unsigned int)buffer[0]); // При такой записи все должно быть ровно с выводом, потому что нет хитромудрой пляски с указателями, данные строго типизированы
...
}while (act_read == 1);