2016-11-16 72 views
0

我有两个结构如下所述。在设置了huffmanTree = tempNode之后,huffmanTree的左右内部指针为NULL。但是,在此之前,该值仍然有效,但在设置两个结构相等后,该值就消失了。我究竟做错了什么?设置两个相等的结构后指针为NULL

我只是想创建一个huffmanTree struct并用一些数据初始化它。然后创建一个tempNode,其中HuffmanTree *left指向huffmanTreeHuffmanTree *right指向新数据。当我从huffmanTree数据打印出来,它是NULL

// Leaf node 
typedef struct HuffmanLeaf { 
private: 
    char data; 
    int count; 
public: 
    HuffmanLeaf() { 

    } 

    void setData(char data) { 
     this->data = data; 
    } 

    void setCount(int count) { 
     this->count = count; 
    } 

    char getData() { 
     return this->data; 
    } 

    int getCount() { 
     return this->count; 
    } 
}HuffmanLeaf; 


// Huffman tree 
typedef struct HuffmanTree { 
    HuffmanTree *right; 
    HuffmanTree *left; 
    HuffmanLeaf huffmanLeaf; 
} HuffmanTree; 

int main() { 
    /* huffmanLeaf[] was defined and initialized 
    . 
    . 
    . 
    . 
    */ 

    // Take the first two smallest and so on 
    HuffmanTree huffmanTree; 
    HuffmanTree tempNode; 

    // Allocate memory for internal struct 
    huffmanTree.left = new (HuffmanTree); 
    huffmanTree.right = new (HuffmanTree); 
    tempNode.left = new (HuffmanTree); 
    tempNode.right = new (HuffmanTree); 

    // Two character with least frequency. Create a new Tree 
    huffmanTree.right->huffmanLeaf = huffmanLeaf[0]; 
    huffmanTree.left->huffmanLeaf = huffmanLeaf[1]; 


    // Next character 
    tempNode.left = &huffmanTree; // have node left point to huffmanTree 
    tempNode.right->huffmanLeaf = huffmanLeaf[2]; // new data on node right 

    /* Data is still here for tempNode */ 
    cout << tempNode.left->left->huffmanLeaf.getData() << endl; 

    /* Error occured after this */ 
    huffmanTree = tempNode; 

    // Value is NULL 
    cout << huffmanTree.left->left->huffmanLeaf.getData() << endl; // Value is NULL 
} 
+2

可以显示HummanTree :: left的类型,HuffmanTree的析构函数和任何复制构造函数/赋值运算符的内容?顺便说一句,快速修复将是制作huffmanTree和tempNode指针。 – dseifert

+0

它工作。你能告诉我为什么吗? – tuyenle

回答

2

你做tempNode.left = &huffmanTree;,那huffmanTree = tempNode;后。这将是一个奇迹,如果事情没有出问题......

虽然严重,分配前:

huffmanTree is { new, new } 
tempNode is { &huffmanTree, new } 

任务后,huffmanTree is { &huffmanTree, new }

所以你的指针跳跃基本上是:

huffmanTree->huffmanTree->huffmanTree->huffmanLeaf.GetData(); 

由于您没有为“huffmanTree”定义任何huffmanLeaf,它将返回任何val它有默认情况下(未定义的行为,因为你没有初始化构造函数中的data