#64 closed ожидается проверка (задача сдана)
HW2
Reported by: | Andrey | Owned by: | Vladimir Rutsky |
---|---|---|---|
Priority: | проверка | Milestone: | |
Component: | HA#2 huffman | Version: | |
Keywords: | Cc: | andreypestov82@… |
Description
Класс Хафман написан, но программа еще не работает. Сдаю с надеждой получить замечания, чтобы позже доделать.
Change History (9)
comment:1 Changed 7 years ago by
Cc: | andreypestov82@… added |
---|---|
Milestone: | ha2-milestone1 → ha1-milestone2 |
comment:2 Changed 7 years ago by
comment:3 Changed 7 years ago by
Milestone: | ha1-milestone2 → ha2-milestone2 |
---|
comment:4 Changed 7 years ago by
После того как я перешел на uint8_t, программа перестала выполнять декомпозицию. Выдает segmentation fault. Я так и не понял как читать из файла или переводить из char в uint8. Долго уже бъюсь над задачей - не выходит.
comment:5 Changed 7 years ago by
Milestone: | ha2-milestone2 → ha2-deadline |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Замечания:
- Все методы класса
huffman
статические. В данном случае нет смысла использовать класс в качестве интерфейса. Реализуйте вhuffman.hpp
две функцииcompress
иdecompress
, а остальные детали реализации кодирования/декодирования перенесите вhuffman.cpp
.
- Вы не включили в размер дополнительных данных 4 байта от размера таблицы символов, и 4 байта количества закодированных символов.
std::priority_queue
не гарантирует, что при добавлении элементов с одним приоритетом они будут извлечены в каком-то определённом порядке, поэтому теоретически ваше решение может строить различные деревья при кодировании и декодировании, если у каких-то символов одинаковый частота встречаемости, при приведёт к ошибчному декодированию.
Node
сравнивает листья стабильно, но не-листья --- не стабильно (т.к.symbol
у них всегда равен0
).
- Память для узлов дерева освобождается некорректно.
Здесь вы делаете очень плохую вещь:
priority_queue <Node> frequencies; ... Node * first = new Node(frequencies.top()); frequencies.pop(); Node * second = new Node(frequencies.top()); frequencies.pop(); Node * X = new Node(first, second); frequencies.push(*X);
Тип
priority_queue <Node> frequencies
подразумевает, чтоfrequencies
владеет объектамиNode
, и они должны быть копируемыми. Вы же создаётеNode
в куче и затем явно приводите его кNode
.
Храните вpriority_queue
Node *
и передавайте собственный компаратор вpriority_queue
.
ПустьNode
владеет своимиleft
иright
и освобождает их память в десткруторе.
Исправьте, пожалуйста, в ближайшее время.
comment:7 Changed 7 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Ко второму дедлайну.