Opened 6 years ago

Closed 6 years ago

#204 closed ожидаются исправления (задача сдана)

ha1

Reported by: Alina Filimokhina Owned by: rutsky,grabovoy.philipp
Priority: проверка Milestone: ha1-deadline
Component: HA#1 matrices Version: 1.0
Keywords: Cc:

Description

Проверьти, пожалуйста, мое домашнее задание.

Change History (3)

comment:1 Changed 6 years ago by Vladimir Rutsky

Milestone: ha1-milestone1ha1-milestone2

comment:2 Changed 6 years ago by Vladimir Rutsky

Milestone: ha1-milestone2ha1-deadline
Type: ожидается проверкаожидаются исправления

Замечания:

  1. В вашем решений присутствуют ошибки из списка из условия задачи "часто возникающие ошибки":
    • 10: в bool check_file(char *file); вы передаёте буфер char (строку), который не планируете модифицировать - передавайте его константным: bool check_file(char const *file);
    • 26: for (int i = 0; i < n; i++) {
  1. В matrices.hpp отсутствует страж включения.
  1. В matrices.hpp вы используете тип size_t, который определён в <cstddef>, но последний вы не включаете (тем самым заголовочный файл у вас не самодостаточен).
  1. Включайте matrices.hpp в matrices.cpp --- это хороший способ частично проверить, что заголовочный файл соответствует реализации.
  1. Вы не освобождаете выделенную память. Все блоки памяти, выделенные с помощью new[], должны быть освобождены с помощью delete[]. Даже в случае возникновения ошибочных ситуаций (например, несоответствующий размер матриц), вся выделенная память должна быть аккуратно освобождена.

Если вы будете выделять память в конструкторе, а освбождать в деструкторе Matrix, то не забудьте, аккуратно определить конструктор копирования и operator=, чтобы не получилось так, что один и тот же буфер выделенной памяти был освобождён дважды.

Или вы можете явно выделять и освобождать память вне конструктора и деструктура, используя Matrix как структуру для хранения размера и указателя на буфер, если (пока) не хотите разбираться с конструкторами копирования и operator=.

  1. Вместо посимвольного сравнения в check_operator() используйте сравнение строк:
std::string s = ...;
if (s == "--add")
{
   ...
}
  1. Вместо 1, 2, 3 в check_operator лучше использовать enum. Но если вы исправите предыдущее замечание, то можно будет убрать функцию check_operator и проверять текущую операцию на равенство со строками прямо в коде main().

comment:3 Changed 6 years ago by Vladimir Rutsky

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

Замечания:

  1. Из предыдущей проверки замечание про константность неизменяемых аргументов не исправлено до конца. Например, в int make(char *file, Matrix &out) стоит использовать int make(char const *file, Matrix &out), т.к. буфер с именем файла не должен меняться внутри make.

Решение зачтено, но с минусом.

Note: See TracTickets for help on using tickets.