2014-09-25 61 views
0

當程序嘗試添加一個數字時,出現堆棧溢出。它似乎在訪問不存在的二叉搜索樹。這是錯誤代碼: 未處理的異常在CIS 350問題2.exe中的0x01084DD9:0xC0000005:訪問衝突讀取位置0xCDCDCDD5。 有人可以幫忙嗎?提前致謝!二進制搜索樹創建堆棧overlfow

#include <iostream> 
#include <algorithm> // for permutations 
using namespace std; 

struct BST 
{ 
    BST* left; 
    BST* right; 
    int d; 

    BST(int data) 
    { 
     d = data; 
     BST* left; 
     BST* right; 
     cout << d << endl; 
    } 
    void add(int data) 
    { 
     cout << d << " | " << data << endl; 
     if (d < data){ 
      if (right == NULL){ 
       right = new BST(data); 
      } 
      else{ 
       right->add(data); 
      } 
     } 
     else{ 
      if (left == NULL){ 
       left = new BST(data); 
      } 
      else{ 
       left->add(data); 
      } 
     } 
    } 
    } 
int main() 
{ 
    BST* test1 = new BST(12); 
    test1->add(14); 

    system("pause"); 
    return 0; 
} 
+3

'left'和'right'未初始化(使用'NULL')。 – AlexD 2014-09-25 00:10:33

+0

@AlexD謝謝!有效! – Nazariy1995 2014-09-25 00:23:39

回答

0

正如評論指出的AlexD,分段錯誤源於一個事實,即struct BST成員leftright不被初始化到NULL

請注意,這是由表示「訪問衝突讀取位置0xCDCDCDD5」的錯誤提示的。使用Microsoft C++運行時庫的位置0xCDCDCDCD是標記未初始化內存的幻數。

位置0xCDCDCDD5(8字節從0xCDCDCDCD偏移)出現作爲代碼left->add(data)嘗試在構件left->d(8字節從所述位置通過left指向偏移)來寫。