void HTCoding(HTree HT, HTCode &HC, int n) { // 分配存储赫夫曼编码的空间 HC = new char*[n]; char* cd = new char[n]; cd[n - 1] = '\0'; // 从叶子结点向上逆向求编码 for (int i = 0; i < n; i++) { int start = n - 1; int c = i; int f = HT[i].parent; while (f != -1) { if (HT[f].left == c) { cd[--start] = '0'; } else { cd[--start] = '1'; } c = f; f = HT[f].parent; } // 将编码存储到HC数组中 HC[i] = new char[n - start]; strcpy(HC[i], &cd[start]); } delete[] cd; }为什么最后只释放cd的内存不释放HC的内存
时间: 2024-03-04 07:54:22 浏览: 53
实验四二叉树的应用-哈夫曼编码(实验报告).pdf
在这个函数中,我们使用了 `new` 关键字来分配存储赫夫曼编码的空间,这里是分配了一个 `char*` 类型的数组,用于存储每个字符的编码。在函数结束时,我们需要释放这个数组的内存空间,以免造成内存泄漏。所以,如果在调用这个函数之前,传入的 `HC` 参数已经进行了动态内存分配,那么在函数结束时,也应该使用 `delete[]` 关键字来释放这个数组的内存空间。
但是,如果在函数调用之前,`HC` 参数没有进行动态内存分配,那么在函数结束时,就不需要释放 `HC` 的内存空间,因为这个内存空间并不是在这个函数中动态分配的。所以,最后只需要释放动态分配的 `cd` 数组的内存空间即可。
阅读全文