我无法在C ++函数中使用new来构建

时间:2017-12-07 13:38:37

标签: c++ pointers

我想在这个函数中为一个参数新建一个空格。

void Binary::PreAndMid(Qnode* root, char temp1[], char temp2[], int m, int n, int j, int k) {
    if (n - m != k - j || m > n || j > k) {
        return;
    }
    else {
        root = new Qnode;  /*in other function the root is become null*/
        root->val = temp1[m];
        cout << root->val << endl;
        int f = Find(temp2, temp1[m]);
        if (f == -1) {
            return;
        }
        else {
            PreAndMid(root->LC, temp1, temp2, m + 1, m + f - j, j, f - 1);
            PreAndMid(root->RC, temp1, temp2, m + f - j + 1, n, f + 1, k);
        }
    }
}

结果是root为null。

2 个答案:

答案 0 :(得分:3)

这是因为您需要执行*& root以便最后返回新的内存地址。现在你打破规则永远不要在参数上使用赋值运算符。

答案 1 :(得分:2)

参数root作为指针的副本传入。从函数返回后,不会为此指针赋值。

如果你想这样做,你需要通过引用传递指针rootQnode* &root,它将确保调用此函数的代码和函数本身使用相同的变量。