mekakic
2010-08-02, 11:48:10
something is very wrong unter VS7.1 ... ich habe gerade mit Fremdcode zu tun und dort ein paar Änderungen durchgeführt. Jetzt habe ich mich gewundert, dass ich an einer Stelle immer in eine Exception laufe - lange vor der Stelle im Programm wo ich Änderungen vorgenommen habe.
Ich habe erst nicht gesehen, was falsch läuft - aber plötzlich fiel mir auf, dass ich in einer Klasse in die falschen Memberfunktionen springe. :confused:
Wenn ich einen Call auf einem Pointer mache z.B. "foo->test1()" lande ich in "foo->test2()". Alle Calls landen anscheinend in der Funktion die im Code einen tief hängt.
Ich habe mir das genauer angeschaut und die fragliche Klasse hat komplett virtuelle Funktionen. Ich dachte irgendwas passiert zur Laufzeit evtl. mit der vtable. Also hab ich das Objekt im Debugger komplett verfolgt und im Konstruktor ist noch alles in Ordnung und die Pointer auf die Funktionen werden richtig abgebildet, wenn ich aber den Konstruktor Scope verlasse und dann im Construtor Scope der Child Class bin (also die von der fraglichen Klasse erbt), dann sind die Pointer plötzlich falsch und auf andere Funktionen abgebildet. Also foo->test1() zeigt dann auf eine Adresse die im Disassembly an bei foo::test2() liegt.
Code kann ich nicht posten, aber ich frage mich ob jemand eine Idee hat, durch was sowas evtl. verursacht wird KÖNNTE, ganz grundsätzlich, weil ich den Fehler absolut nicht finde.
Ich habe erst nicht gesehen, was falsch läuft - aber plötzlich fiel mir auf, dass ich in einer Klasse in die falschen Memberfunktionen springe. :confused:
Wenn ich einen Call auf einem Pointer mache z.B. "foo->test1()" lande ich in "foo->test2()". Alle Calls landen anscheinend in der Funktion die im Code einen tief hängt.
Ich habe mir das genauer angeschaut und die fragliche Klasse hat komplett virtuelle Funktionen. Ich dachte irgendwas passiert zur Laufzeit evtl. mit der vtable. Also hab ich das Objekt im Debugger komplett verfolgt und im Konstruktor ist noch alles in Ordnung und die Pointer auf die Funktionen werden richtig abgebildet, wenn ich aber den Konstruktor Scope verlasse und dann im Construtor Scope der Child Class bin (also die von der fraglichen Klasse erbt), dann sind die Pointer plötzlich falsch und auf andere Funktionen abgebildet. Also foo->test1() zeigt dann auf eine Adresse die im Disassembly an bei foo::test2() liegt.
Code kann ich nicht posten, aber ich frage mich ob jemand eine Idee hat, durch was sowas evtl. verursacht wird KÖNNTE, ganz grundsätzlich, weil ich den Fehler absolut nicht finde.