写入缓冲区溢出和读写数据无效

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

写哈夫曼树给,给树节点开辟动态内存空间时
HT写入缓冲区溢出和HT读取数据无效

用代码块功能插入代码,请勿粘贴截图
void haffcode(haff* &HT, int n, type* w)//n为叶子总数
{
    int m;
    m =2 * n - 1;//m为数节点数
    int mm = m + 1;
    //HT = (haff*)calloc((mm), sizeof(haff));
    HT = (haff*)malloc((mm)* sizeof(haff));//此时警告    C6386    写入 "HT" 时缓冲区溢出    
  //而换成calloc就没有警告
    assert(HT);
    HT[0] = { 0, 0, 0 };
    int i = 1;
    for (; i <= n; i++)
    {
        HT[i] = { w[i - 1], 0, 0 };
    }
    for (; i <= m; i++)
    {
        HT[i] = { 0, 0, 0 };
    }
    for (i = n + 1; i <= m; i++)
    {
        int s1 = 0, s2 = 0;
        select(HT, i, &s1, &s2);
        HT[i].left = s1;
        HT[i].right = s2;
        HT[s1].parent = i;
        HT[s2].parent = i;
        HT[i].weight = HT[s1].weight + HT[s2].weight;
    }
}
运行结果及报错内容

在给数组HT[i]内容赋值时总会警告(c6385和c6386)
而将malloc换成calloc警告

我想要达到的结果

这个造成的原因是是什么

函数的第一个 haff* &HT 把 & 去掉,应该就是一个哈夫曼节点数组吧,改成 haff *HT


这个链接看看

该警告一般常见于写入的数据个数超过了开始时分配的内存大小,或则也有可能说是编译器的代码审查功能出现了漏洞,无法正常判断分配的内存大小

你申明一个 haff 指针测试变量用malloc看是否出错。再一个在之前加个对mm大于0的判断 试试