J'ai essayé de coder la compression shannon-fano et je pense que je suis resté coincé dans une allocation de mémoire. Il va jusqu'à la deuxième itération de la fonction, puis écrasé àCodage Shannon-Fano
nod *node=new nod;
node->st=new nod;
node->st->st=NULL;
node->st->dr=NULL;
Cette fonction est censée créer l'arbre binaire en utilisant Divide et impera, mais la première fois qu'il appelle shannonFano (n> st, commencer) il se bloque. Ma supposition est que l'allocation de la mémoire est fausse. classe nod {char * info; int * pondere; int val; struct nod * st, * dr; Je ne suis pas sûr de ce que vous voulez faire, mais je vois des problèmes.
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);
}
}
Bienvenue chez SO. S'il vous plaît, formatez correctement votre code et expliquez mieux quel est le problème. Je vous remercie. – skypjack