编程好难鸭 2021-11-30 14:31 采纳率: 100%
浏览 42
已结题

引发了异常: 写入访问权限冲突。 store 是 0x1920111。请问如何解决?

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

引发了异常: 写入访问权限冲突。
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();

}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

2条回答 默认 最新

  • 关注

    第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; 根据你的需要来处理
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月8日
  • 已采纳回答 11月30日
  • 创建了问题 11月30日

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?