Я реализую алгоритм кубирования звезд для агрегации данных в C++ (я новичок в C++). В этом алгоритме мы имеем большие данные. На первом этапе мы строим базовое дерево, используя все данные, а затем на основе базового дерева мы должны строить другие деревья, называемые звездными деревьями, после того, как каждое звездное дерево завершено, его значения выводятся, а звездное дерево должно быть уничтожено. Я сделал весь этот процесс, мой алгоритм работает, но его использование памяти очень много, и кажется, что эти звездные деревья не уничтожены. Ниже часть моего кода, я думаю, что это полезно для этой проблемы:Почему я не могу удалить созданные деревья?
Для каждого дерева, которое я намерен уничтожить, я передаю его корень destroyTree (узел * корень) метод:
void Cagg::destroyTree(node* root){
int size = root->child.size();
for (int i = 0; i < size; i++){
destroyTree(root->child[i]);
}
delete root;
root = NULL;
}
при отладке, кажется, узел удален, но использование памяти в программе растет экспоненциально, в то время как программа создает больше звездных деревьев, а это значит, что они не уничтожены. Более того, деструктор пуст. Я просто удаляю узлы в этом методе. Заранее благодарим вас за помощь.
Кроме того, я наследую структуру узла из другого класса. Возможно ли, что это проблема? и деструкторы обоих классов пусты.
Ничего страшного здесь не происходит. Я бы посмотрел в другом месте на утечку. И я бы также посмотрел на хранение узлов, а не на указатели на узлы. Почему все-таки мирились с ручным управлением памятью? Если это доступно в вашей ОС, посмотрите на то, чтобы дать Valgrind удар при обнаружении утечки. – user4581301
Я никогда не слышал об этом. (Я действительно новый;)). Я просто ищу его. Кажется, valgrind для unix os, я прав? Я использую окна. У вас есть какие-либо предложения для окон? Спасибо – sahar
Ничего из того, что я достаточно знаком, чтобы рекомендовать. Вот серое сообщение о замене Windows: http://stackoverflow.com/questions/413477/is-there-a-good-valgrind-substitute-for-windows – user4581301