2016-12-15 38 views
-3

我想获得一个树,C++中的所有整数的总和,但每当我运行该程序时,它一直与此错误打破:未处理的异常抛出:读访问冲突。树是nullptr。如果有这种异常的处理程序,该程序可能会安全地继续

未处理的异常抛出:读访问冲突。树是nullptr。如果这个异常的处理程序,该程序可以继续安全地

这是我的函数:

int sigma(Node<int> *Tree) 
{ 
    int sum = 0; 
    if (Tree->item == NULL) 
    { 
     return 0; 
    } 
    else 
    { 
     sum = sum + sigma(Tree->left); 
     sum = Tree->item; 
     sum = sum + sigma(Tree->right); 
    } 
    return sum; 
} 

这是我的头文件:

template <typename T> 
class Node 
{ 
public: 
    Node(T itm, Node *lft, Node* rht); 
    Node(T itm); // for creating a leaf node 
    ~Node(); 
    void printTree(); 
    bool searchTree(T key); 
    bool search(T word); 
    int depth(Node *tree); 
    T item; 
    Node *left, *right; 
}; 

template <typename T> 
Node<T>::Node(T itm) 
{ 
    item = itm; 
    left = nullptr; 
    right = nullptr; 
} 

template <typename T> 
Node<T>::Node(T itm, Node *lft, Node *rht) 
{ 
    left = lft; 
    right = rht; 
    item = itm; 

} 

template <typename T> 
Node<T>::~Node() 
{ 
    delete[] left, right; 
} 

任何关于如何我的任何想法可以修复这个?

+2

请[编辑]你的问题提供了[MCVE。 –

+0

你已经有了答案:* Tree was nullptr * –

+0

'delete [] left,right;'我从来没有见过这个(我永远不会使用它)。这实际上是否删除所有条目?如果不是,它只是删除左侧,操作员不做任何事情。 – stefaanv

回答

2

添加检查树== NULL在开始

int sigma(Node<int> *Tree) 
{ 
    int sum = 0; 
    if (Tree == NULL || Tree->item == NULL) 
    { 
     return 0; 
    } 
    else 
    { 
     sum = sum + sigma(Tree->left); 
     sum = sum + Tree->item; 
     sum = sum + sigma(Tree->right); 
    } 
    return sum; 
} 
+0

修好了!谢谢! –

相关问题