c++ - 设置两个结构彼此相等后指针为 NULL

标签 c++ struct

我在下面描述了两个结构。设置huffmanTree = tempNode后,huffmanTree的内部指针right和left都为NULL。然而,在此之前该值仍然有效,但在将两个结构设置为彼此相等之后该值消失了。我做错了什么?

我只想创建一个huffmanTree 结构 并用一些数据对其进行初始化。然后创建一个 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
}

最佳答案

您执行 tempNode.left = &huffmanTree;,然后执行 huffmanTree = tempNode;。如果某些事情没有出错,那将是一个奇迹......

说真的,在作业之前:

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

赋值后,huffmanTree is { &huffmanTree, new }

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

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

并且由于您没有为“huffmanTree”定义任何 huffmanLeaf,它默认返回它具有的任何值(未定义的行为,因为您没有在构造函数中初始化 data,正如您应该的那样)

关于c++ - 设置两个结构彼此相等后指针为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40624819/

相关文章:

python - 无法从 pybind11 中的静态函数返回 shared_ptr

c++ - 如何增加 C++ 中 long long 的范围?

c++ - 推力::复杂的推力::device_vector编译错误,可能是由于错误的实现

go - Golang 中的泛型方法参数

c - 静态结构警告空声明中无用的存储类说明符

c# - 尝试读取或写入 protected 内存。这通常表明其他内存已损坏

c++ - 来自元组的构造函数参数

C 编程抽象 - typedef 外部声明

c++ - 在类构造函数中初始化自定义结构对象的正确方法

c++ - 如何反转二叉搜索树?