Probleme mit Zeigern oder so



  • Hallo,

    ich habe Probleme mit meiner Baumklasse.
    Ich vermute, dass der Fehler in dem Konstruktor liegt, der einen HuffmanToken bekommt, habe aber keine Ahnung was da falsch ist.
    HuffmanToken ist ein selbstdefinierter Datentyp, der einen Buchstaben und seine Frequenz (in einem gegebenen Text) enthält.

    #include "HuffmanTreeNode.h"
    #include <iostream>
    using namespace std;
    
    class HuffmanTree {	
    	private:
    		HuffmanTreeNode *dummy;
    		HuffmanTreeNode *curr;
    
    	public:
    		// default constructor
    		HuffmanTree() {
    
    		}
    
    		// constructor, constructing a tree with one node containing a given object
    		HuffmanTree(HuffmanToken *obj) {
    			dummy->setLeftSon(new HuffmanTreeNode(obj));
    			dummy->getLeftSon()->setParent(dummy);
    			dummy->getLeftSon()->setLeftSon(0);
    			dummy->getLeftSon()->setRightSon(0);
    
    		}
    
    		// destructor
    		~HuffmanTree() {
    
    		}
    
    		// ctor, constructing a new HuffmanTree out of 2 HuffmanTrees
    		HuffmanTree(HuffmanTree *t1, HuffmanTree *t2) {
    			// create new HuffmanTree with the sum of the frequencies of the 2 old HuffmanTrees as new frequency
    			double d1 = t1->getRoot()->getData()->getFreq();
    			double d2 = t2->getRoot()->getData()->getFreq();
    			HuffmanToken *Tok = new HuffmanToken(d1 + d2);
    
    			cout << "1 : T1 Freq: "<<t1->getRoot()->getData()->getFreq() << "\n";
            	cout << "2 : T2 Freq: "<<t2->getRoot()->getData()->getFreq() << "\n";
    			HuffmanTreeNode *root = new HuffmanTreeNode(Tok);
    			dummy->setLeftSon(root);
    			root->setLeftSon(t1->getRoot());
    			t1->getRoot()->setParent(root);
    			root->setRightSon(t2->getRoot());
    			t2->getRoot()->setParent(root);
    		}
    
    // returns the root node of the tree
    		HuffmanTreeNode* getRoot() {
    			return dummy->getLeftSon();	
    		}
    
    }; // HuffmanTree
    

    Ich kann problemlos einen Baum initialisieren, auch einen zweiten, aber sobald ich einen dritten Baum initialisieren möchte, ist der zweite verloren.

    Beispiel:

    int main() {
    
    	HuffmanTree *tree1 = new HuffmanTree(new HuffmanToken('a', 5));
    
    	HuffmanTree *tree2 = new HuffmanTree(new HuffmanToken('c', 8));
    	cout << "Tree1 Freq: "<<tree1->getRoot()->getData()->getFreq() << "\n";
    	cout << "Tree1 Char: "<<tree1->getRoot()->getData()->getChar() << "\n";
    
    	HuffmanTree *tree3 = new HuffmanTree(new HuffmanToken('b', 2));
    
    	cout<<"\n tree1:"<<tree1;
    	cout<<"\n tree2:"<<tree2;
    	cout<<"\n tree3:"<<tree3;
    

    Bei der Ausgabe sieht man, dass die Adresse von tree2 und tree3 die gleichen ist.

    tree1:000331F8
    tree2:000347B0
    tree3:000347B0

    Kann mir jemand sagen, was ich falsch gemacht habe?
    Hat es eventuell etwas damit zu tun, dass ich den Konstruktor nicht mit delete aufrufe? Ich weiß bloß leider nicht, wann ich einen Baum löschen muss.

    Grüße, CoLi



  • lerne wie man einen debugger benutzt.


Anmelden zum Antworten