Opened 5 years ago
Closed 4 years ago
#468 closed ожидается проверка (задача сдана)
HW #1
Reported by: | sukhodolskiy.maksim | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | HW #1 (BMP) | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (8)
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Почему у меня это работает??
comment:3 Changed 4 years ago by
Другая версия компилятора / стандартной библиотеки. В системе могут быть иначе организованы включения заголовочных файлов друг в друга, могут быть определены другие макросы. Проблема усугубляется при использовании сторонних библиотек.
comment:5 Changed 4 years ago by
Можно сделать меньше пиковое потребление памяти.
Сейчас не выполняется требование
При проблемах с аргументами, открытием файла, выделением памяти и прочим, программа должна корректно завершить работу и вернуть ненулевой код возврата.
сразу скажу, что использовать в bmp.c exit не стоит, причины опишу на Вики.
13 assert(fread(&input_bmp->file_header, sizeof(char), sizeof(BITMAPFILEHEADER), input_file) == sizeof(BITMAPFILEHEADER));
14 assert(fread(&input_bmp->info_header, sizeof(char), sizeof(BITMAPINFOHEADER), input_file) == sizeof(BITMAPINFOHEADER));
25 assert(fread(input_bmp->pixels[i], sizeof(char), byte_width, input_file) == (size_t)byte_width);
Внутрь assert не стоит как-либо модифицировать что-либо. assert может быть вырезан на этапе компиляции (-DNDEBUG), что приведет к тому, что программа перестанет работать.
40 if (byte_width % 4 != 0) {
41 byte_width = (1 + byte_width / 4) * 4;
42 }
стоит вынести в функцию, дублируется
В rotate нужно пересчитать file_header.bfSize
comment:6 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:7 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
Я постарался максимально использовать short-circuit evaluation.
В crop и rotate, однако, нужно было только один malloc на NULL проверить, поэтому написал просто if.
Также при открытии файлов я сразу проверяю на NULL, чтобы не делать fclose(NULL), я же верно делаю?
comment:8 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
проверка пользовательского ввода осуществлена не совсем корректно: в месте чтения аргументов не проверяется, что они заданы корректно; вместо этого программа упадет по assert-у. Лучше было бы проверять переданные данные на валидность, выдавать сообщение об ошибке пользователю и на этом сразу прекращать работу.
функция get_padding_width не соответствует своему названию: padding - это размер пропуска. Можно было бы именовать aligned_width
c == ' ' | c == '.' | c == ', failed. |
(\n в конце строки)
7 #define BIT_MASK 7
8 equals 00000111
можно использовать 0b111
10 #define MAX_VAL ALPHABET_SIZE + 2
раскроется в 26 + 2.
И, скажем, MAX_VAL * 2 окажется не 56, а 26 + 2 * 2 = 30.
По этой причине в макросах ставят скобки:
10 #define MAX_VAL (ALPHABET_SIZE + 2)
кодирование / декодирование реализовано неверно - символы не записываются побитово; перепутаны x и y при записи; записанное сообщение не удастся прочитать (тестируйте свой код)