Rückgabewert: Referenz
-
Jau, danke das hat gepasst.
Aber noch ein wirklicher Fehler in Deinem Code:
new[]
impliziertdelete[]
. Also den D'tor entsprechend ändern.Komischerweise kompiliert er alles und die Test sind auch alle richtig. Deshalb verstehe ich nicht was du mit D´tor meinst.
-
Wenn du den Speicher, den du mit new[] angeforder hast, vie delete freigibst, ist das Verhalten undefiniert.
Undefiniert heißt: "Your program's behavior is undefined -- you have no way of knowing what will happen...That means compilers may generate code to do whatever they like: reformat your disk, send suggestive email to your boss, fax source code to your competitors, whatever." -- Scott Meyers, "Effective C++"
Es ist pures Glück, dass das bei dir funktioniert.
Gebe den Speicher mit delete[] frei und alles ist gut.
Ein weiterer Grund, warum man nicht mit dynamischen Speicher manuell hantieren sollte, aber wenn das verlangt ist...
Sicher, dass N ein Templateparameter sein muss?
-
Nathan schrieb:
Wenn du den Speicher, den du mit new[] angeforder hast, vie delete freigibst, ist das Verhalten undefiniert.
Undefiniert heißt: "Your program's behavior is undefined -- you have no way of knowing what will happen...That means compilers may generate code to do whatever they like: reformat your disk, send suggestive email to your boss, fax source code to your competitors, whatever." -- Scott Meyers, "Effective C++"
Es ist pures Glück, dass das bei dir funktioniert.
Gebe den Speicher mit delete[] frei und alles ist gut.
Ein weiterer Grund, warum man nicht mit dynamischen Speicher manuell hantieren sollte, aber wenn das verlangt ist...
Sicher, dass N ein Templateparameter sein muss?Jap, N muss ein Templateparameter sein. Aber ich muss doch den Speicher wieder freigeben? Beim erstellen des Objekts wird durch den Konstruktor doch Speicher reserviert und dieser muss doch am Ende wieder freigegeben werden. Und genau das passiert doch, deshalb verstehe ich das "Undefiniert" nicht. Ich verstehe ja was du meinst, das andere Daten gelöscht werden können, aber den Speicher den ich reserviere, den kann ich doch wieder freigeben, so wie ich das gemacht habe.
EDIT: Habe gerade das im Internet gefunden => delete []entries. Ist das jetzt so richtig?
-
Aknayirp schrieb:
EDIT: Habe gerade das im Internet gefunden => delete []entries. Ist das jetzt so richtig?
Jupp.
Und wahrscheinlich hast Du Dir jetzt auch gedacht, dass D'tor D[estruk]tor ist.
-
Ja, das hat Sinn gemacht:D
Vielen Dank nochmal an alle für die ganze Hilfe!
-
daddy_felix schrieb:
hustbaer schrieb:
Nathan schrieb:
Returne einfach *(entries + index).
Man könnte auch die Kurzschreibweise
entries[index]
statt*(entries + index)
verwendendas hat Nathan in seinem Beitrag unter "BTW" auch gleich erwähnt
*self-facepalm*
Ich bin blind!
Sorry @Nathan!
-
Furble Wurble schrieb:
Aknayirp schrieb:
EDIT: Habe gerade das im Internet gefunden => delete []entries. Ist das jetzt so richtig?
Jupp.
Und wahrscheinlich hast Du Dir jetzt auch gedacht, dass D'tor D[estruk]tor ist.Was, das heisst nicht Deletor?
-
...
-
Destruktor.
-
Devastat0r
-
Destrutinator.
-
Hat zwar nichts direkt mit Referenzen zutun, aber ich schreibe das mal hier rein...
Hab unter Ausnutzung des Singleton Prinzips die Klasse hier geschrieben aber ich bekomme eine Fehlermeldung. Wäre toll, wenn mir einer sagen könnte, was ich den übersehen bzw. falsch gemacht habe.
//einmal die Deklaration in .h #ifndef _CDoubleHashing #define _CDoubleHashing #include <iostream> class CDoubleHashing { private: CDoubleHashing(); CDoubleHashing(const CDoubleHashing& other); CDoubleHashing operator=(CDoubleHashing& other); static CDoubleHashing m_instanz; public: static CDoubleHashing& getInstance(); unsigned int hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt); }; #endif _CDoubleHashing //einmal in .cpp #include"CDoubleHashing.h" CDoubleHashing& CDoubleHashing::getInstance() { return m_instanz; } CDoubleHashing CDoubleHashing::m_instanz; unsigned int CDoubleHashing::hash(unsigned int I, unsigned int J, unsigned int dict_size, unsigned int attempt) { int x = 2/(I+J)*(I+J+1)+J; return ( x + attempt*(1+ ( x%(dict_size-2) ) ) ) % dict_size; }
Bekomme ein "error LNK2019", habe danach gegooglet, hat mir aber herzlich wenig geholfen...
MfG
Aknayirp
-
Aknayirp schrieb:
Hat zwar nichts direkt mit Referenzen zutun, aber ich schreibe das mal hier rein...
Dann mach bitte einen neuen Thread auf.
-
hustbaer schrieb:
Aknayirp schrieb:
Hat zwar nichts direkt mit Referenzen zutun, aber ich schreibe das mal hier rein...
Dann mach bitte einen neuen Thread auf.
Alles klar. Dann hat sich das ja geklärt:D