Fehler beim Beenden des Programmes
-
Hier noch was zum Lesen über Singletons
http://www.oop-trainer.de/Themen/Singleton.html
http://www.haiko-emmel.de/Single.htm
-
Setz doch mal nen breakpoint in die Konstruktoren...
-
Hallo
Braunstein schrieb:
Hier noch was zum Lesen über Singletons
http://www.oop-trainer.de/Themen/Singleton.html
http://www.haiko-emmel.de/Single.htmWenn ich das richtig sehe, dann entspricht das template-Beispiel in dem zweiten Link doch fast genau dem, für das ich hier so harte Kritik
einstecken musste.templäd schrieb:
Setz doch mal nen breakpoint in die Konstruktoren...
Das vesteh ich nicht richtg. Der Fehler tritt doch auf, wenn das Programm sich beendet.
chrische
-
Ja richtig. Die Vermutung ist doch, dass irgendein Destruktor das Problem macht.
Aber man weiß nicht wo ein Objekt instanziiert wird.
Wenn man im Konstuktor stehen bleibt kann man im Calstack nachkucken woher er kommt.
-
chrische5 schrieb:
Hallo
Braunstein schrieb:
Hier noch was zum Lesen über Singletons
http://www.oop-trainer.de/Themen/Singleton.html
http://www.haiko-emmel.de/Single.htmWenn ich das richtig sehe, dann entspricht das template-Beispiel in dem zweiten Link doch fast genau dem, für das ich hier so harte Kritik
einstecken musste.Hab den zweiten Link jetzt nur überflogen. Aber was ich da gesehen habe ist IMHO extrem schlecht (selbst wenn wir die Sache mit den Makros vergessen; ich gehe mal davon aus, daß die nicht ernst gemeint sind). Zweck des Singleton-Patterns ist es im Allgeminen die Instanzen einer Klasse auf maximal ein Objekt zu beschränken.
Dieser Zweck wird in dem Moment verfehlt, wo ein öffentlicher Konstruktor existiert. Und das ist wirklich nur die Spitze des Eisberges.
Ich will nicht sagen, daß man die angegebenen Klassen nicht als Singleton einsetzen könnte, aber es mangelt ihnen allesamt an Robustheit, d.h. es ist viel zu einfach damit durch geringfügige Fehler bei der Benutzung Bugs zu erzeugen (es gibt bei den verschiedenen Beispielen unter anderem Probleme beim Aufräumen und zum Teil ist auch die Exception-Sicherheit nicht ohne das Betreiben von zusätzlichem Aufwand gegeben).
chrische5 schrieb:
templäd schrieb:
Setz doch mal nen breakpoint in die Konstruktoren...
Das vesteh ich nicht richtg. Der Fehler tritt doch auf, wenn das Programm sich beendet.
chrische
Ja schon, aber indem die feststellst, ich welchen Konstruktor das Programm hineingeht, könntest zu zumindest mal ermitteln, wo da überhaupt was konstruiert wird (ist aus dem bisher gezeigten nicht ersichtlich).
-
Der Konstruktor der Kindklasse muß ja nicht public sein. In diesem Fall muß man die Basisklasse aber zumindest zum friend der Kindklasse machen.
-
Hi Chrische,
hab mir das Ganze gerade mal angeschaut.
Geh mal in die Projekteigenschaften->Linker->Befehlszeile und da gibst du unter weitere Optionen folgendes ein:
/NODEFAULTLIB:msvcrtJetzt noch das komplette Projekt bereinigen und neu erstellen.
Damit sollte es eigentlich ok sein.Gruss Spacelord
-
Hallo
@all: Vielen Dank für eure Mühen.
@Spacelord: Ich weiß nicht, wei du das gemacht hast, aber ich bin dir wirklich zu Dank verpflichtet. Also: Vielen Dank für deine Mühen, deinen Einsatz und so weiter.
Weißt du auch was genau nun das Problem war?
chrische
-
@Spacelord
Ehrlich gesagt kann ich nicht ganz glauben, dass das die Lösung des Problems sein soll. Die Fehlermeldung deutet wie gesagt auf ein Dereferenzieren eines Nullzeigers hin. Und es ist relativ unwahrscheinlich, dass dies durch die VC Runtime verursacht wird. Oder hast du eine Erklärung, warum dieses Linker Flag das Problem beseitigt? Evtl. irgendwelche Inkompatibilitäten von SDL?
-
Hallo
Auf jeden Fall kommt jetzt diese Fehlermeldung nicht mehr.
chrische
-
Aber ob der eigentliche Fehler behoben wurde ist noch unklar.
-
Welche von den etlichen Lib´s die Chrische verwendet(SDL und diverse boost Geschichten) das Problem verursacht hat,hab ich nicht weiter verfolgt.
Fakt ist dass der Linker ne Warnung geschmissen hat dass die Debug Runtime mit der Release Runtime in Konflikt steht.
Ich kann mir schon vorstellen dass da das Problem herkam.
Auf jeden Fall lässt sich das Programm jetzt ohne Access Violation beenden(ich wüsste auch nicht was danach noch für nen Problem auftauchen sollte
).Gruss Spacelord