【问题标题】:Shannon-Fano encodingShannon-Fano 编码
【发布时间】:2015-11-17 18:47:53
【问题描述】:

我一直在尝试编写 shannon-fano 压缩的代码,但我想我遇到了内存分配问题。它上升到函数的第二次迭代,然后在

处崩溃
   nod *node=new nod;
   node->st=new nod;     
   node->st->st=NULL;
   node->st->dr=NULL;

这个函数应该使用 Divide et Impera 创建二叉树,但它第一次调用 shannonFano(n->st,begin); 时会崩溃。我的猜测是内存分配错误。 上课点头 {字符*信息; 诠释*思考; 整数值; 结构点头 *st, *dr;

void shannonFano(nod *n, int dim)
{     
  if (dim>1)
  {

 int begin=0;
 int end=dim;
 int b_sum=n->pondere[0];
 int e_sum=n->pondere[dim];
 nod *node=new nod;
 node->st=new nod;     
 node->st->st=NULL;
 node->st->dr=NULL;

 node->dr=new nod;     
 node->dr->st=NULL;
 node->dr->dr=NULL;

 while (begin !=end-1)
 {
  if (b_sum > e_sum)
      {end--;
       e_sum=e_sum+n->pondere[end];
       } else {
              begin++;
              b_sum=b_sum+n->pondere[begin];
              }
 }

 strncpy(node->info,n->info,begin);
 for (int i=0;i<begin;i++)
     node->pondere[i]=n->pondere[i];
     node->val=0;
     n->st=node;

 strncpy(node->info,&n->info[end],dim-end+1); 
 for (int i=end;i<dim;i++)
     node->pondere[i]=n->pondere[i];     
     node->val=1;      
     n->dr=node;

   shannonFano(n->st,begin);
   shannonFano(n->dr,dim-end+1);              

    }           

}

【问题讨论】:

  • 欢迎来到 SO。请正确格式化您的代码并更好地解释问题所在。谢谢。

标签: c++ memory compression dynamic-allocation


【解决方案1】:

我不确定你想做什么,但我看到了问题。根据您的格式,您希望每次都执行 for 循环之后的三行,但只有第一行是。您需要添加{}

【讨论】:

    【解决方案2】:

    我无法真正看到 100% 的代码,以及它是如何执行的,所以如果我错了,请不要对我大喊大叫,但是这一行:

    int e_sum=n->pondere[dim];
    

    似乎很可疑。这个数组分配在哪里?它的大小是暗淡的吗?如果是这样,最后一个元素将在 pondere[dim-1]; 并使用 dim 处的值会导致未定义的行为,可能会导致程序崩溃。

    此外,您的 for 循环后面没有大括号,因此只有它们之后的第一行会在循环中执行,而您的缩进表明您正在尝试执行所有缩进的行(我相信每种情况下都是 3 行)

    【讨论】:

    • 我不打算将所有这 3 行都包括在内;我只是想看到他们分组。思考是在我没有在这里显示的构造函数中自动分配的。在调试时我注意到它没有通过nod *node=new nod; node-&gt;st=new nod; node-&gt;st-&gt;st=NULL; node-&gt;st-&gt;dr=NULL; 的第二次迭代
    猜你喜欢
    • 2015-02-11
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2011-08-19
    • 2011-04-03
    相关资源
    最近更新 更多