引发了异常: 写入访问权限冲突。
store 是 0x1920111。
void HuffmanTree::docode(huffcode& code, int n)
{
code = new char* [n + 1];
char* store = new char[n];
//零时存放编码
store[n - 1] = '\0';
int start, c, i, f;
for (i = 1; i <= n; i++)
{
start = n - 1;
c = i;
f = huffTree[i].parent;
while (f != 0)
{
--start;
if (huffTree[f].lchild == c)
store[start] = '0';
else
store[start] = '1';
c = f; f = huffTree[f].parent;
}
code[i] = new char[n - start];
code[i] = &store[start];
}
delete store;
fstream outFile("编码.txt", ios::out);
for (int i = 1; i <= n; i++)
{
outFile << huffTree[i].ascii << " " << huffTree[i].weight << " ";//写入字符,权值
while (!code[i])
{
outFile << code[i];//写入编码
}outFile << endl;
}
outFile.close();
}
第8行
start = n - 1;
store中一共n个字节,start-1就是最后一个char所在的位置,你的代码中使用的都是这个最后的char,store最后的\0被覆盖掉了
建议把char* store = new char[n];这里改成char* store = new char[n+1];
store[n - 1] = '\0'改成store[n] = '\0'
start = n - 1;这一句需不需要改成start = n - i; 根据你的需要来处理
start没有初始化啊
int start = 0;