2016-04-13 50 views
0

我正在爲學校的一個項目編寫一個程序,要求我們根據從文件讀取的數據(在此情況下爲字符串)創建Binary Search Tree。當輸入重複字符串時,樹應允許通過遞增整數值來實現重複。動態分配內存時訪問衝突

樹節點是一個結構如下:

struct TreeNode { 
    string word; 
    int count; 
    TreeNode * left; 
    TreeNode * right; 
}; 

我遇到的問題是,當我嘗試調用插入功能的程序崩潰。我運行調試器,出現以下錯誤:

Exception thrown at 0x00E2A87C in Proj12.2.exe: 0xC0000005: Access violation reading location 0x00000014.

什麼是導致此錯誤的原因? 下面是相關代碼的其餘部分:

TreeNode * Root = new TreeNode; 
Root->right = NULL; 

void insert(TreeNode *& root, string item) { //insert function, called by Root->right,temp 
    if (root->word == item) { 
     root->count++; 
     return; 
    } 
    if (root == NULL && root->word != item) { 
     root = new TreeNode; 
     root->left = NULL; 
     root->right = NULL; 
     root->word = item; 
     root->count = 1; 
     return; 
    } 
    if (item < root->word) { 
     insert(root->left, item); 
    } 
    if (item > root->word) { 
     insert(root->right, item); 
    } 
} 
+0

你的第二個如果必須保持第一個 – Incomputable

+1

'root == NULL && root-> word!= item' - 如果第一個表達式是真的,你真的*想要執行第二個? – WhozCraig

+0

@WhozCraig不應該短路嗎? – Incomputable

回答

0

如果(根== NULL)應首先檢查您試圖訪問使用任何數據成員之前執行 - >操作。 條件:如果(根 - >字==項目) 條件:如果(!根== NULL & &根 - >字=項目)

你的根是空的,然後您試圖訪問根 - >這是導致崩潰的詞。您正嘗試使用無效指針訪問數據成員。

+0

哇。是的,它修復了它。我不知道我是如何錯過的。謝謝。 –