7.e.Q
11-01-2006, 08:02
Hi Leute,
ich habe ein kleines Problem hier, weiß nicht, wie ich es angehen soll. Ich benutze für mein Programm das Designkonzept Singletons (Sprache C++; private Konstruktoren; statische Instanzen von sich selbst innerhalb der Klassen; getInstance-Funktionen, die als Rückgabewert eine Referenz auf die Instanz liefern):
class Bla
{
private:
Bla();
~Bla();
public:
static Bla& getInstance()
{
static Bla Instance;
return Instance;
}
};
Okay, funktioniert super. Das hat halt den Vorteil, daß man projektglobal immer Zugriff auf die selbe Instanz einer Klasse hat. Schlecht allerdings, wenn man mehr als eine Instanz benötigt. Aber das ist bei meinem Programm an den meisten Stellen nicht der Fall.
So... das Problem ist jetzt, daß beim Aufruf von getInstance Valgrind mir immer folgende Fehlermeldungen liefert:
==21288== Invalid write of size 4
==21288== at 0x8073D99: CMain::MainLoop(int, char**) (CMain.cxx:49)
==21288== Address 0x52BFEC3C is on thread 1's stack
In Zeile 49 in CMain.cxx ist genau der Aufruf einer getInstance Funktion:
Bla* cBla = &Bla::getInstance();
Also wie kommt das zustande? Wie kann man das beheben?
Danke
Gruß,
Hendrik
ich habe ein kleines Problem hier, weiß nicht, wie ich es angehen soll. Ich benutze für mein Programm das Designkonzept Singletons (Sprache C++; private Konstruktoren; statische Instanzen von sich selbst innerhalb der Klassen; getInstance-Funktionen, die als Rückgabewert eine Referenz auf die Instanz liefern):
class Bla
{
private:
Bla();
~Bla();
public:
static Bla& getInstance()
{
static Bla Instance;
return Instance;
}
};
Okay, funktioniert super. Das hat halt den Vorteil, daß man projektglobal immer Zugriff auf die selbe Instanz einer Klasse hat. Schlecht allerdings, wenn man mehr als eine Instanz benötigt. Aber das ist bei meinem Programm an den meisten Stellen nicht der Fall.
So... das Problem ist jetzt, daß beim Aufruf von getInstance Valgrind mir immer folgende Fehlermeldungen liefert:
==21288== Invalid write of size 4
==21288== at 0x8073D99: CMain::MainLoop(int, char**) (CMain.cxx:49)
==21288== Address 0x52BFEC3C is on thread 1's stack
In Zeile 49 in CMain.cxx ist genau der Aufruf einer getInstance Funktion:
Bla* cBla = &Bla::getInstance();
Also wie kommt das zustande? Wie kann man das beheben?
Danke
Gruß,
Hendrik