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 Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

С точки зрения стиля в целом все хорошо.

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

comment:2 Changed 4 years ago by Денис Лочмелис

Type: ожидаются исправленияожидается проверка

Обновил согласно комментарию.

Makefile, кажется, учитывает заголовки, в переменной headers.

read_n_bytes специально сделана под различное число байт, т.к. я заранее не был уверен, какие поля мне понадобятся. И все еще могут зачем-нибудь понадобиться поля длиной 2, поэтому я оставил так.

comment:3 Changed 4 years ago by Денис Лочмелис

Version: 1.02.0

comment:4 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
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 : в случае ошибки нужно закрыть файловый дескриптор
везде: в случае ошибки нужно освободить всю аллоцированную к этому моменту память

Тем самым требование

При проблемах с аргументами, открытием файла, выделением памяти и прочим, программа должна корректно завершить работу и вернуть ненулевой код возврата.

выполнено лишь частично

Note: See TracTickets for help on using tickets.