#28 closed ожидаются исправления (задача сдана)
HA1
Reported by: | Andrey | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#1 matrices | Version: | 1.0 |
Keywords: | Cc: |
Description
Владимир, добрый вечер.
Я загрузил домашнее задание в понедельник ночью до дедлайна, но упустил информацию, что нужно было создать карточку.
Посмотрите, пожалуйста, мою работу.
Андрей Пестов
andreypestov82@…
Change History (7)
comment:1 Changed 8 years ago by
Milestone: | ha1-milestone1 → ha1-milestone2 |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Используйте один тикет для одной задачи, как указано здесь.
comment:3 Changed 7 years ago by
Milestone: | ha1-milestone2 → ha1-deadline |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Замечания:
- Передавайте неизменяемые объекты по константной ссылке:
Matrix * readMatrix (string const & file_name)
- Нельзя использовать
exit()
для нормального выхода из программы. При вызовеexit()
не раскручивается стек и не вызываются деструкторы, т.е. не происходит никакой (вероятно важной) деинициализации объектов.
- Нет необходимости явно закрывать файл:
{ ifstream matrix_file; matrix_file.open (file_name); ... matrix_file.close(); }
он будет закрыт, когда переменная
matrix_file
будет уничтожена при выходе из области видимости.
Плюс, вы можете открыть файл при конструировании
ifstream
:ifstream matrix_file(file_name);
.
- Страж включения должен оборачивать весь файл:
#include <fstream> #ifndef MATRICES_HPP #define MATRICES_HPP ...
- Условие в этом методе всегда истинно:
void Matrix::clear() { if (this != nullptr) delete [] data_; }
Возможно вы имели в виду
if (data_ != nullptr)
?
Кстати, безопасно вызыватьdelete nullptr
иdelete [] nullptr
--- это определённые операции, которые ничего не делают (т.е. внутриdelete
есть проверка, является ли аргумент nullptr).
clear()
и~Matrix()
дублируют друг-друга. Вызывайте из~Matrix
clear()
.
- В программе всё ещё есть утечки памяти. Например, вы освобождаете память от результирующей матрицы:
A->printMatrix(); A->clear();
но не освобождаете память в
A
:A
был получен какnew Matrix
, соответственно теперь где-то нужно сделатьdelete A
.
Аналогично со всеми остальными объектами
Matrix
--- вы выделяете их в куче, но не освобождаете.
Попробуйте вместоclear()
удалять объектыMatrix
, тогда они в деструктуре будут освобождать память, выделенную для элементов матрицы.
- Аккуратно обработайте крайние случае, например, когда программа вызывается без аргументов (сейчас она падает). При обработке всех ошибок вся выделенная память должна быть корректно освобождена.
comment:5 Changed 7 years ago by
Summary: | Извините. Я забыл про тикет → HA1 |
---|
comment:6 Changed 7 years ago by
Resolution: | → задача сдана |
---|---|
Status: | new → closed |
Замечания:
- Вы объявили
Matrix::clear()
, но не реализовали его (но и не используете).
Решение зачтено.
Андрей, здравствуйте!
Замечания:
matrices.hpp
.#include "matrices.hpp"
, а не синтаксис включения системных заголовочных файлов (#include <matrices.hpp>
).#include <cstdlib>
вместо#include <stdlib.h>
(если вам этот заголовочный файл действительно необходим).int
1
,2
для операций используйте enum.A->~matrix();
) --- это очень специфичная операция. Либо вынесите освобождение памяти в отдельный метод (clear()
), либо удаляйтеmatrix
с помощьюdelete
.