Проблема с перегрузкой оператора минус

Моя программа содержит класс дерева, для которого я хочу перегрузить "-" по следующей логике: дерево - число, то есть от каждого элемента дерева отнимается это число, в первый раз, при вызове перегрузки всё работает верно и корректно, но если вызвать второй раз эту перегрузку, то программа зависает и закрывается с длинной ошибкой

Вызов перегрузки в main:

cout << tree-numb;

Сама перегрузка:

    template<class T>
    void BinTree<T>::forminus(node* node, double numb) const
    {
        if (node != nullptr)
        {
            node->val = node->val-numb;
            forminus(node->right, numb);
            forminus(node->left, numb);
        }
    }
    template<class T>
    BinTree<T> BinTree<T>::operator-(const double& numb) const
    {
        forminus(tr, numb);
        BinTree tmp(*this);
        return tmp;
    }

Проблема сохраняется даже если я убираю функцию "forminus", так что дело не в ней, что можно сделать? Обыскал все в интернете что мог, решения не нашёл

Правка:

 template<class T>
    class BinTree
    {
    private:
        struct node
        {
            T val;
            node* left;
            node* right;
        };
        node* tr;
    public:
        BinTree()
        {
            tr = nullptr;
        }
        BinTree(T v)
        {
            tr = new node;
            tr->val = v;
            tr->left = NULL;
            tr->right = NULL;
        }
        BinTree(const BinTree& other)
        {
            T* arr = new T[getSize(other.tr)];
            getArr(other.tr, arr, 0);
            for (int i = 0; i < getSize(other.tr); i++)
            {
                this->insert(arr[i]);
            }
            delete[] arr;
        }

В main перегрузка вызывается церез циклическое меню swtich-case:

case 8:
            {
                cout << endl << "Vvedite chislo: "; cin >> numb;
                cout << tree-numb;
            }break;

Первый вывод на экран корректен, от каждого элемента дерева действительно отнялось введённое число, если же еще раз зайти в этот кейс и вызвать эту перегрузку, программа закрывается и выдает следующую ошибку:

Process finished with exit code -1,073,741,819.

Функция getArr создаёт массив элементов дерева, и по этому массиву создается идентичное дерево

template<class T>
int BinTree<T>::getArr(node* node, T*& array, int i)
{
    if (node == NULL) return i;
    array[i] = node->val;
    i++;
    if(node->left != NULL) i = getArr(node->left, array, i);
    if(node->right != NULL) i = getArr(node->right, array, i);

    return i;
}

Ответы (1 шт):

Автор решения: Кирилл

Проблема решена, конструктор копирования был неверным

→ Ссылка