malloc: *** d'erreur pour objet: pointeur être libérés n'a pas été alloué *** définir un point d'arrêt dans malloc_error_break pour déboguer
Quelqu'un peut-il m'aider à comprendre où je veux en venir cette erreur. Je sais que c'est probablement une double délétion ou quelque chose comme ça. Pour le fond c'est une implémentation de l'huffman de l'arbre que vous pouvez facilement réaliser sur wikipedia.
CharCountNode implémentation de la classe
int main()
{
ifstream input;
input.open("input.txt");
MinPriorityQueue<CharCountNode> heap;
map<char, int> m;
while(input.good())
m[input.get()] += 1;
for( map<char, int>::const_iterator it = m.begin(); it != m.end(); ++it )
heap.enqueue(CharCountNode(it->first, it->second));
while(heap.getSize() > 1)
{
CharCountNode a, b, parent;
a = heap.dequeue();
b = heap.dequeue();
parent = CharCountNode('*', a.getCount() + b.getCount());
parent.left = &a;
parent.right = &b;
heap.enqueue(parent);
}
}
définissez un point d'arrêt dans malloc_error_break à déboguer.
Appliquer
Je vais essayer
Au moment de ce post: valgrind ne fonctionne pas avec Mac OS X 10.10.
Utiliser une machine virtuelle.
Appliquer
valgrind
et fixer le premier chose dont elle se plaint. Répétez jusqu'à ce que le programme fonctionne correctement.Je vais essayer
Au moment de ce post: valgrind ne fonctionne pas avec Mac OS X 10.10.
Utiliser une machine virtuelle.
OriginalL'auteur waldyr.ar | 2014-04-02
Vous devez vous connecter pour publier un commentaire.
Le problème avec ce code:
C'est d'obtenir des pointeurs vers des variables locales, qui sera réinitialisé la prochaine fois autour de la boucle.
CharCountNode
finira par essayer dedelete
ces objets, mais ils n'ont pas été affectées par de nouveaux.Vous avez besoin de faire
left
etright
point pour les objets alloués sur le tas, car c'est ceCharCountNode
attend. Quelque chose comme:OriginalL'auteur The Dark