2012-09-24 84 views
0

我不知道是什麼導致程序失敗,除了它與嘗試向左右兒童分配一些指針有關的事實。沒有錯誤消息,程序只是無法運行。我只是假設這是因爲我錯誤地分配了指針。運行失敗(未知原因)

struct TreeNode 
    { 
      Type nodeinfo; 
      BinaryTree<Type> *left; 
      BinaryTree<Type> *right; 
    }; 

類的名稱使用模板二叉樹:

這裏的結構。這裏是違規方法:

template <typename Type> 
void BinaryTree<Type>::setSubtree(Type a){ 
    root = new TreeNode; 
    BinaryTree<Type> *b,*c; 
    root->nodeinfo=a; 

    b->root = s.top(); 
    root->right = b; 
    s.pop(); 

    c->root = s.top(); 
    root->left = c; 
    s.pop(); 
    s.push(root); 
} 

s是一個類型爲TreeNode *的堆棧並保存節點。 根是個別節點。

我已經改變了很多次,我忘記了我的開始。這是測試代碼(setInfo工作得很好):

tree.setInfo('b'); 
tree.setInfo('c'); 
tree.setSubtree('-'); 

任何有識之士來我應該如何分配的指針將不勝感激。

+4

您試圖取消引用未初始化的指針。 – chris

+0

某處存在錯誤消息,這是訪問衝突,而且是嚴重的錯誤消息。在編寫另一行代碼之前,您應該找到輸出消息轉儲到的位置。 – Aesthete

回答

0
BinaryTree<Type> *b,*c; 
... 
b->root = s.top(); 
... 
c->root = s.top(); 

你永遠初始化指針bc

你應該自己發現這些錯誤。來到這個網站作爲你的第一個防禦錯誤是一個非常糟糕的主意。你不會學習如何調試。沒有我們的幫助,你怎麼能發現這些問題?使用編譯器,使用分析工具(如valgrind),使用調試器,甚至手動執行代碼。

瞭解如何通過啓用編譯器警告來使用您的編譯器。當編譯優化並且啓用了足夠的警告時,GNU和clang會捕獲像這樣的錯誤。瞭解如何使用調試器。學習如何執行代碼。

相關問題