问题遇到的现象和发生背景
写哈夫曼树给,给树节点开辟动态内存空间时
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警告
我想要达到的结果
这个造成的原因是是什么