Opened 4 years ago
Closed 4 years ago
#513 closed ожидается проверка (задача сдана)
HW #1
Reported by: | Денис Лочмелис | Owned by: | Sokolov Viacheslav |
---|---|---|---|
Component: | HW #1 (BMP) | Version: | 2.0 |
Keywords: | Cc: |
Description
V1: вроде работает (по крайней мере, те, что %4, точно должны)
Change History (4)
comment:1 Changed 4 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Обновил согласно комментарию.
Makefile, кажется, учитывает заголовки, в переменной headers.
read_n_bytes специально сделана под различное число байт, т.к. я заранее не был уверен, какие поля мне понадобятся. И все еще могут зачем-нибудь понадобиться поля длиной 2, поэтому я оставил так.
comment:3 Changed 4 years ago by
Version: | 1.0 → 2.0 |
---|
comment:4 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
gcc src/main.c -Wall -Wextra -Werror -Iinclude -c -o obj/main.o -fsanitize=address -fsanitize=undefined -fsanitize=leak -g src/main.c: In function ‘main’: src/main.c:16:5: error: implicit declaration of function ‘strcmp’ [-Werror=implicit-function-declaration] if(strcmp(argv[1]) != 0) ^~~~~~ cc1: all warnings being treated as errors Makefile:23: recipe for target 'obj/main.o' failed make: *** [obj/main.o] Error 1
в некоторых местах не хватает not null проверок (img != NULL)
В update_header_data length можно было бы не принимать, потому что он вычисляется на основании длины и ширины; в crop этот агрумент передается неверно (тем самым после crop изображение находится в невалидном состоянии).
save_bmp / load_bmp : в случае ошибки нужно закрыть файловый дескриптор
везде: в случае ошибки нужно освободить всю аллоцированную к этому моменту память
Тем самым требование
При проблемах с аргументами, открытием файла, выделением памяти и прочим, программа должна корректно завершить работу и вернуть ненулевой код возврата.
выполнено лишь частично
С точки зрения стиля в целом все хорошо.
Makefile: не хватает зависимостей .o от .h
CHKERR лучше организовать чуть иначе, а именно передавать errtype аргументом, это сделает прозрачнее места использования: CHKERR(errtype);
также хорошей практикой является на свои #define делать #undef, чтобы контролировать область видимости макроса
обратите внимание, что по условию нужно обработать ситуацию, когда w и h отрицательные
в конце пропущен flush_bmp_image
сам flush освобождает pixels неправильно (до width, а не до height)
Еще нужно обновлять bfSize
Поэтому может быть удобно сгруппировать set_raster_length, set_raster_width, set_raster_height в один метод, который сразу выставит нужные поля
read_n_bytes используется только с n=4 и реализуется проще
return *(uint32_t*)(first_byte);