У меня есть класс шаблона дерева поиска AVL, который в основной функции, когда я вызываю общедоступный метод вставки, я получаю ошибку. Я вызываю метод внутри main
У меня есть класс шаблона дерева поиска AVL, который в основной функции, когда я вызываю общедоступный метод вставки, я получаю ошибку. Я вызываю метод внутри main [code]#include #include #include using namespace std;
#ifndef _TREE_H #define _TREE_H
struct DocumentItem { string documentName; int count; DocumentItem(string& docName,int& c) : documentName(docName),count(c) {} };
void insert(Node*& t, const Key& k, const Value& v) { if (t == NULL) { t = new Node(k, v); } else if (k < t->key) { // Inserted into left tree insert(t->left, k, v); if (height(t->left) - height(t->right) == 2) { if (k < t->left->key) // k was inserted to the left-left subtree rotateWithLeftChild(t); else doubleWithLeftChild(t); } } else if (k > t->key) { // Inserted into right tree insert(t->right, k, v); if (height(t->right) - height(t->left) == 2) { if (k > t->right->key) rotateWithRightChild(t);// k was inserted to the right-right subtree else doubleWithRightChild(t); } } //update the height of the node t->height = max(height(t->left), height(t->right)) + 1; }
int max(int lhs, int rhs) const { if (lhs > rhs) return lhs; return rhs; }
void remove(const Key x, Node*& t) const { if (t == NULL) return; // Item not found; do nothing if (x < t->key) remove(x, t->left); else if (t->key < x) remove(x, t->right); else if (t->left != NULL && t->right != NULL) // Two children { t->key = findMin(t->right)->key; // t is replaced with the right minimum's value remove(t->key, t->right); // right minimum is removed } else // one or no children { Node* oldNode = t; t = (t->left != NULL) ? t->left : t->right; // new replacement delete oldNode; }
if (t != NULL) { t->height = 1 + std::max(height(t->left), height(t->right)); int balance = getBalance(t); // Left Heavy if (balance > 1) { // Left-Left Case if (getBalance(t->left) >= 0) rotateWithLeftChild(t); // Left-Right Case else { doubleWithLeftChild(t); } } // Right Heavy else if (balance < -1) { // Right-Right Case if (getBalance(t->right) key) return find(x, t->left); else if (t->key < x) return find(x, t->right); else return t; // Match } void makeEmpty(Node*& t) const { // Recursively deletes the tree if (t != NULL) { makeEmpty(t->left); makeEmpty(t->right); delete t->value; // deletes the value which is wordItem delete t; }
string s = "someword"; string filename = "a.txt"; if(!myTree.doesExist(s)) { int initToOne = 1; WordItem item(s, filename, initToOne); myTree.insert(s, &item);
}
return 0; }
[/code] Я получаю следующую ошибку: [code]free(): double free detected in tcache 2 Aborted (core dumped) [/code] Кроме того, я понимаю, что работает только один код: [code] if (t == NULL) { t = new Node(k, v); }
Моя программа AVL
деревья хорошо работают при количестве записей примерно до 5000, но не больше. Проблема, вероятно, будет в переполнении памяти в стеке из-за рекурсии. Может ли кто-нибудь подсказать мне, что изменить, чтобы не нарушить...
У меня есть coredmp, где все стек потоков выглядит нормально, но один стек выглядит вот так. Может ли кто-нибудь сказать мне возможную причину этого? я вижу, что выход вызывается из библиотек oracle, это проблема oracle? Может ли кто-нибудь...
Я пытаюсь найти файл дампа ядра моего аварийного приложения в AlmaLinux 9 (клон Redhat 9). Я не могу найти его нигде. Я следовал этим инструкциям, но они не совсем соответствуют моей системе. Местоположение свалок я подтвердил следующим образом:
#...
Я попытался воссоздать пример на странице при использовании TypeScript. Дерево создается, однако, когда я нажимаю, чтобы свернуть/расширить его, переход, кажется, воссоздает все дерево вместо только добавления/удаления узлов из «нажимаемого»...