簡體   English   中英

二進制搜索樹創建堆棧溢出

[英]Binary Search Tree Creating Stack- overlfow

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

#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;
}

正如AlexD在評論中指出的那樣,分段錯誤是由於struct BST成員leftright未被初始化為NULL所致。

請注意,這由指示“訪問沖突讀取位置0xCDCDCDD5”的錯誤提示。 使用Microsoft C ++運行時庫時,位置0xCDCDCDCD是一個不可思議的數字,用於標記未初始化的內存。

當代碼left->add(data)嘗試寫入成員left->d (從left指向的位置偏移8個字節)時,出現位置0xCDCDCDD5(從0xCDCDCDCD偏移8個字節)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM