怎么把c语言中malloc函数改写成new,求解答?

问题遇到的现象和发生背景

怎么把c语言中malloc函数改写成new,求解答?

ElemType create_HuffmanTree(int* wet, int n)
{
    //一棵有n个叶子节点的赫夫曼树共有2n-1个节点  
    int total = 2 * n - 1;
    ElemType HT = (ElemType)malloc(total * sizeof(HTNode));

    if (!HT)
    {
        printf("HuffmanTree malloc faild!");
        exit(-1);
    }
    int i;

    //以下初始化序号全部用-1表示,  
    //这样在编码函数中进行循环判断parent或lchild或rchild的序号时,  
    //不会与HT数组中的任何一个下标混淆  

    //HT[0],HT[1]...HT[n-1]中存放需要编码的n个叶子节点  
    for (i = 0; i < n; i++)
    {
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].weight = *wet;
        wet++;
    }

    //HT[n],HT[n+1]...HT[2n-2]中存放的是中间构造出的每棵二叉树的根节点  
    for (; i < total; i++)
    {
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].weight = 0;
    }

    int min1, min2; //用来保存每一轮选出的两个weight最小且parent为0的节点  
//每一轮比较后选择出min1和min2构成一课二叉树,最后构成一棵赫夫曼树  
    for (i = n; i < total; i++)
    {
        select_minium(HT, i, min1, min2);
        HT[min1].parent = i;
        HT[min2].parent = i;
        //这里左孩子和右孩子可以反过来,构成的也是一棵赫夫曼树,只是所得的编码不同  
        HT[i].lchild = min1;
        HT[i].rchild = min2;
        HT[i].weight = HT[min1].weight + HT[min2].weight;
    }
    return HT;
}
运行结果及报错内容

img

我的解答思路和尝试过的方法
ElemType create_HuffmanTree(int* wet, int n)
{
    //一棵有n个叶子节点的赫夫曼树共有2n-1个节点  
    int total = 2 * n - 1;
    ElemType* HT = new ElemType[total];
    if (!HT)
    {
        printf("HuffmanTree malloc faild!");
        exit(-1);
    }
    int i;

    //以下初始化序号全部用-1表示,  
    //这样在编码函数中进行循环判断parent或lchild或rchild的序号时,  
    //不会与HT数组中的任何一个下标混淆  

    //HT[0],HT[1]...HT[n-1]中存放需要编码的n个叶子节点  
    for (i = 0; i < n; i++)
    {
        HT[i]->parent = -1;
        HT[i]->lchild = -1;
        HT[i]->rchild = -1;
        HT[i]->weight = *wet;
        wet++;
    }

    //HT[n],HT[n+1]...HT[2n-2]中存放的是中间构造出的每棵二叉树的根节点  
    for (; i < total; i++)
    {
        HT[i]->parent = -1;
        HT[i]->lchild = -1;
        HT[i]->rchild = -1;
        HT[i]->weight = 0;
    }

    int min1, min2; //用来保存每一轮选出的两个weight最小且parent为0的节点  
//每一轮比较后选择出min1和min2构成一课二叉树,最后构成一棵赫夫曼树  
    for (i = n; i < total; i++)
    {
        select_minium(*HT, i, min1, min2);
        HT[min1]->parent = i;
        HT[min2]->parent = i;
        //这里左孩子和右孩子可以反过来,构成的也是一棵赫夫曼树,只是所得的编码不同  
        HT[i]->lchild = min1;
        HT[i]->rchild = min2;
        HT[i]->weight = HT[min1]->weight + HT[min2]->weight;
    }
    return *HT;
}
我想要达到的结果,

将c语言中malloc函数改写成new而不报错

确保源代码文件扩展名不是.c而是.cpp


ElemType create_HuffmanTree(int* wet, int n)
{
    //一棵有n个叶子节点的赫夫曼树共有2n-1个节点
    int total = 2 * n - 1;
    ElemType HT = new HTNode[total];
 
    if (!HT)
    {
        printf("HuffmanTree new faild!");
        exit(-1);
    }
    int i;
 
    //以下初始化序号全部用-1表示,  
    //这样在编码函数中进行循环判断parent或lchild或rchild的序号时,  
    //不会与HT数组中的任何一个下标混淆  
 
    //HT[0],HT[1]...HT[n-1]中存放需要编码的n个叶子节点  
    for (i = 0; i < n; i++)
    {
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].weight = *wet;
        wet++;
    }
 
    //HT[n],HT[n+1]...HT[2n-2]中存放的是中间构造出的每棵二叉树的根节点  
    for (; i < total; i++)
    {
        HT[i].parent = -1;
        HT[i].lchild = -1;
        HT[i].rchild = -1;
        HT[i].weight = 0;
    }
 
    int min1, min2; //用来保存每一轮选出的两个weight最小且parent为0的节点  
//每一轮比较后选择出min1和min2构成一课二叉树,最后构成一棵赫夫曼树  
    for (i = n; i < total; i++)
    {
        select_minium(HT, i, min1, min2);
        HT[min1].parent = i;
        HT[min2].parent = i;
        //这里左孩子和右孩子可以反过来,构成的也是一棵赫夫曼树,只是所得的编码不同  
        HT[i].lchild = min1;
        HT[i].rchild = min2;
        HT[i].weight = HT[min1].weight + HT[min2].weight;
    }
    return HT;
}