Opened 7 years ago

Closed 7 years ago

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

HW#1 Sergei Zherevchuk

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

Description


Change History (8)

comment:1 Changed 7 years ago by Sergei Zherevchuk

Здравствуйте. Пока точно не осознал требование "Убедитесь, что при возникновении ошибок, вы корректно освобождаете всю выделенную память.".
Если я намеренно завершаю выполнение программы через exit, то нужно что-то освобождать? valgrind сейчас с ключом -q на smoke тестах ничего не выводит, если же посмотреть детальный вывод по какому-нибудь из тестов, то что-то есть в блоке still reachable. Это о такого рода ресурсах речь идёт? Как я понял, это как раз ресурсы, которые я ещё могу потенциально освободить.

comment:2 Changed 7 years ago by Vladimir Rutsky

Добрый день!
Использовать exit() в данной задаче нельзя (см. пункт 21 их "часто возникающих ошибок" из условия задачи) --- при использовании exit() нарушается инвариант, что созданные в локальной области видимости переменные будут всегда уничтожены в нужном порядке (они не уничтожаются), перестаёт работать RAII, нарушается типичный порядок выполнения программы.
exit() это низкоуровневый инструмент, который не стоит использовать в типичных С++ программах.

comment:3 Changed 7 years ago by Sergei Zherevchuk

Спасибо за объяснение! Исправился, удалил везде использование exit().

comment:4 Changed 7 years ago by Vladimir Rutsky

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

Замечания:

  1. Внесите #include внутрь стражи включения:
#include <cstddef>

#ifndef MATRIX_HPP
#define MATRIX_HPP

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

  1. matrices.cpp не включает <iostream> для использования std::cout, std::cerr.
  1. Нельзя включать cpp файлы (у вас в main.cpp):
#include <iostream>
#include "matrices.cpp"

Ваша работа должна состоять из двух единиц трансляции (main.cpp и matrices.cpp) и заголовочного файла matrices.hpp, описывающего интерфейс для работы с матрицами (в вашем случае это структура Matrix и функции read_matrix(), print_matrix()); реализация интерфейса должна быть в matrices.cpp.

comment:5 Changed 7 years ago by Sergei Zherevchuk

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

Владимир, спасибо за замечания, исправления внёс. А существует какой-то инструмент, который позволит отследить, какие заголовки не были включены явно? Пока не получается сформировать запрос к гуглу :)

comment:6 Changed 7 years ago by Vladimir Rutsky

Я таких инструментов не нашел, когда последний раз искал. Можно использовать прагматичный подход --- скомпилировать несколькими различными компиляторами с разными стандартными библиотеками и посмотреть, везде ли компилируется.
Но лучше посмотреть какие невстроенные типы или функции вы используете и где они определены (например, на http://cppreference.com).

comment:7 Changed 7 years ago by Sergei Zherevchuk

Спасибо, видимо с опытом придёт.
P.S. Я нашёл только https://github.com/include-what-you-use/include-what-you-use но даже авторы пишут, что работает плохо.

comment:8 Changed 7 years ago by Vladimir Rutsky

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

Решение зачтено.

Note: See TracTickets for help on using tickets.