使用指向C ++

时间:2015-11-09 20:29:49

标签: c++ pointers

我一直在尝试使用指向指针来执行类似于树中的inorder遍历的操作。这是我的代码

struct node {
    char c = '\0';
    int freq = 0;
    node *left = NULL;
    node *right = NULL;
    string code = "";
};

void appendones(node **n) {
    if ((*n) == NULL)
        ;
    else {
        (*n)->code += "1";
        appendones(&(*n)->left);
        appendones(&(*n)->right);
    }
}

void combinenodes(node *a, node *b, node **n) {
    appendones(&a);
    appendones(&b);
    //(*n)=newNode('\0',a->freq+b->freq);
    (*n)->c = '\0';
    (*n)->freq = a->freq + b->freq;
    (*n)->left = a;
    (*n)->right = b;
}

int main() {
    N = input();
    priority_queue<node, vector<node *>, compareNodefreq> nodefreq; // function object
    for (int i = 0; i < N; i++) {
        char s;
        int freq;

        cin >> s >> freq;
        node *n = newNode(s, freq);
        nodefreq.push(n);
    }

    // printheap(nodefreq);

    // perform combining nodes based on frequencies
    while (nodefreq.size() > 1) {
        node *a = nodefreq.top();
        nodefreq.pop();
        node *b = nodefreq.top();
        nodefreq.pop();

        node *n;
        combinenodes(a, b, &n);
        nodefreq.push(n);
    }
}

我在(*n)->code+="1"; appendone()中遇到了细分错误。

我无法弄清楚错误。我的理解是我要过世了 引用指针并执行appendzero()appendone(), 所以我猜那个部分没有错误。我的ab也是 combinenodes()不能为null,因为我从堆栈中弹出。

你可以帮我解决一下吗?

1 个答案:

答案 0 :(得分:0)

哦,我明白了。在main()的{​​{1}}循环中,while被推送并稍后使用,但是无效,因为节点对象本身从未在n中分配(目前已注释掉) )。然后,指针值是未定义的,但在这种情况下,结果是非零,从而无法进行安全检查。