
$continue$
17.09.2018
17:35:47
я смог получить выход похожий на protobuf файл, но я не уверен, что это оно. Завтра, только проверить смогу...
Вот, интересно, может кто нибудь тут делал уже такое

Ilia
17.09.2018
17:37:33

Google

Matwey
17.09.2018
17:50:22

Крис
17.09.2018
18:22:36

Alexander
17.09.2018
18:37:57
могут вот здесь - @supapro

max
17.09.2018
18:38:16

Firstname
17.09.2018
19:10:08
Такс, профессионалы
под маком у valgrind много траблов?

Alexander
17.09.2018
19:30:14
@Artalus

Vladislav
17.09.2018
19:32:29

Аттрибутивно-ассоциативный ряд
17.09.2018
19:32:54

Vladislav
17.09.2018
19:33:44
Многое != все)
А так, быстрый heap profile есть в jemalloc, massif я лично не пробовал

Alexander
17.09.2018
19:35:02
btw, в openbsd можно маллок системный подменить, чтобы находить всякие проблемы с памятью
недавно на линуксовке узнал

Google

Konstantin
17.09.2018
19:35:31
под маком не было траблов с valgrind, нормально работал

Firstname
17.09.2018
19:36:05
Щя продублирую сюда

Vladislav
17.09.2018
19:36:30

Аттрибутивно-ассоциативный ряд
17.09.2018
19:37:04
Кто-нибудь пробовал memoro?

Vladislav
17.09.2018
19:37:40

Stanislav
17.09.2018
19:38:06


Firstname
17.09.2018
19:38:23
Смотрите, если кратко то волгринд агриться на то, что память создаваемая в insertAll не освобождается
https://github.com/Worsell/SomeSimpleProjects/tree/SimpleBinaryTree
bool insertAll(iter begin, iter end) {
//std::sort(begin, end, std::less<T>());
auto *tmp = new SimpleSearchTree<T>();
int b = 100;
for (auto i = begin; i != end; i++) {
tmp->insert(*i);
if ((tmp->size != 0) && (tmp->size % b == 0)) {
if (root == nullptr) {
root = tmp->root;
} else {
Node<T> *const node = getParent(tmp->root->getElement(), root);
if (node->getElement() > tmp->root->getElement()) {
node->setLeft(tmp->root);
tmp->root->setParent(node);
} else {
node->setRight(tmp->root);
tmp->root->setParent(node);
}
}
size += (tmp->size);
tmp = new SimpleSearchTree<T>();
}
}
if (root == nullptr) {
root = tmp->root;
} else {
if (tmp->size != 0) {
Node<T> *const node = getParent(tmp->root->getElement(), root);
if (node->getElement() > tmp->root->getElement()) {
node->setLeft(tmp->root);
tmp->root->setParent(node);
} else {
node->setRight(tmp->root);
tmp->root->setParent(node);
}
}
}
size += (tmp->size);
return true;
}
я тупо создаю древо, и подвешиваю его к уже существующему
scr/SimpleTree.h
leak definitly lost
модель удаления древа - рекурсивная
у нас гарантируется, что при удалении корня, все что ниже очиститься из памяти корректно
virtual ~Node() {
delete left;
delete right;
right = nullptr;
parent = nullptr;
left = nullptr;
}
деструктор ноды все делает
В чате для нубов обсудили
все свелось к тому, что надо лопатить код
может есть какие нибудь более здравые предложения?
потому что код простой и тут тупо не может быть утечек


Alexander
17.09.2018
19:41:45

Google

Vladislav
17.09.2018
19:42:37
bonus: пока перелопатишь, поймешь где была утечка)

Firstname
17.09.2018
19:43:23
ну умные указатели там просто все переписать будет
я думаю так и поступлю

Vladislav
17.09.2018
19:46:51

Firstname
17.09.2018
19:47:03
ну я про это же
там чисто сахар переписать

Vladislav
17.09.2018
19:47:26
в реализации BST это строк 20-30 поменять, на вскидку

Firstname
17.09.2018
19:48:50
ну у меня не больше
вы лучше скажите, почему оно агриться:(((((

/dev
17.09.2018
20:16:20

Stolyarchuk
18.09.2018
00:45:58
delete tmp

Vladislav
18.09.2018
00:49:59

Stolyarchuk
18.09.2018
00:52:24
зачм нуллить указатель на уже удалённый объект?

Stanislav
18.09.2018
00:56:42
вот проверку на нул делать не надо, это да

Ilia
18.09.2018
01:01:10

Vladislav
18.09.2018
01:01:55

Google

Stanislav
18.09.2018
01:01:55

Ilia
18.09.2018
01:03:08
В отладчике.

Stolyarchuk
18.09.2018
01:03:10
двойная аллокация памяти (пох что по 8 байт всего) это сильно...

Stanislav
18.09.2018
01:03:33

Stolyarchuk
18.09.2018
01:03:34
в деструкторе всмысле

Vladislav
18.09.2018
01:04:38
аллокация памяти в деструкторе? o_O

Stanislav
18.09.2018
01:05:10

Ilia
18.09.2018
01:07:21
Ну, может человеку надо, а исключения он перехватывает все...

Stolyarchuk
18.09.2018
01:19:43
ну надо, так надо.. непонятно просто зачем

Firstname
18.09.2018
06:12:25
Щя задебажим и норм будет

Viacheslav
18.09.2018
07:14:43
TEST(SimpleSearchTree, SimpleAddAll) {
auto *test = new std::vector<int>();
auto *const trees = new ::myLibrary::SimpleSearchTree<int>();
test->reserve(5);
Весёлые тесты, однако. Извращение какое-то, всё на куче выделять.
for (std::__1::__tree_const_iterator<int, std::__1::__tree_node<int, void *> *, long>::value_type i: *test) {
ASSERT_EQ(true, trees->contains(i));
А это вообще супер ?

Evgeniy
18.09.2018
07:19:34

Anatoly
18.09.2018
07:20:26

Евгений
18.09.2018
07:20:36
auto для неудачников?
Для заставших C++11, тут мб легаси доисторического периода? Иначе хз что за мазохизм

Firstname
18.09.2018
07:21:18
О да
До моего кода добрались ???

Google

Firstname
18.09.2018
07:22:04

Viacheslav
18.09.2018
07:22:26
Да бес с ним, с auto. Мне интересно, сколько времени человек потратил, чтобы этот внутренний тип выкопать, и не лень ведь было.

Firstname
18.09.2018
07:22:29
В ide:)))

Vladislav
18.09.2018
07:22:56

Evgeniy
18.09.2018
07:23:12

Евгений
18.09.2018
07:23:28