Opened 3 years ago

Closed 3 years ago

#248 closed ожидается проверка (задача сдана)

hw_01

Reported by: Terova Valeriia Owned by: Святослав Власов
Component: HW #1 (BMP) Version: 3.0
Keywords: Cc:

Description

Вроде бы даже память не течет🤞🏼

(но это не точно, и я не уверена, что оно не падает все-таки на квадратных изображениях, хотя вроде бы работает 🤔)

Change History (5)

comment:1 Changed 3 years ago by Святослав Власов

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

Корректность 10/20

  1. Запуск на Лене с координатами 50 100 64 32 приводит к коррапшену памяти. Если запустишь с валгриндом -- он тебе подскажет что и где идет не так.
  2. При попытке повернуть неквадратное изображение целиком -- тоже сегфолт
  3. Изображения с ненулевым паддингом (выравниванием строк, тобишь), когда ширина изображения не делится на 4, твоей программой обрабатываются неверно. То сегфолт, то какие-то артефакты.

Стиль -- 5/10

  1. Использовать int в объявлении структуры, которую ты читаешь с диска -- это ошибка. Размер int зависит от компилятора, платформы и иногда положения сатурна в водолее. Для стандартного gcc под linux-x86 он действительно будет 4 байта, как ты ожидаешь, но в общем случае это может оказаться не так. Можно скомпилировать под x64 и он будет 8 байт, тогда весь твой код будет работать неверно. Для того, чтобы не зависить от компилятора, используй типы данных с точной длиной -- uint32_t и т.п..
  2. Зачем тебе в bmp.h такая портянка из инклюдов. Убери лишние и оставь только те, которые тебе нужны именно в этом заголовочном файле, остальные подключай там, где они используются.
  3. #pragma once и инклюд-гарды -- взаимоисключающие вещи, используй что-то одно
  4. Выделенную память хорошо бы проверять assert'ами
  5. В большинстве кодстайлов, если тело цикла или условия занимает несколько строк, то его нужно помещать в фигурные скобки, даже если это один оператор, советую этого придерживаться.
  6. Вот такие конструкции прям просятся в функции get_pixel(bmp, x, y)/set_pixel(bmp, x, y, value), в них очень просто посадить баг, поэтому лучше такого избегать:
    buffer->image[buffer->w * (bmp->header.biWidth - i - 1) + 3 * j]
    
  7. Советую тебе crop и rotate не делать "на месте", а создавать новое изображение. Это упростит тебе жизнь в разы.

comment:2 Changed 3 years ago by Terova Valeriia

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

fixed

comment:3 Changed 3 years ago by Святослав Власов

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

Корректность -- 20/20

Стиль -- 9/10

  1. Те функции, которые ты не используешь нигде кроме bmp.c не нужно выносить в заголовочный файл, их нужно сделать статическими.

comment:4 Changed 3 years ago by Terova Valeriia

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

Вот так?

comment:5 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

30/30

Note: See TracTickets for help on using tickets.