Methode kennt Objekt nicht



  • Hallo,

    Das sieht ganz so aus, als ob du irgendwo auf nicht allozierten Speicher zugreifst (schreibend). Das muß nichts mit deiner Klasse zu tun haben. So etwas erzeugt undefiniertes Verhalten und kann sich auch viel später auswirken. Geh einfach mal mit dem Debugger durch den gesamten Code und schau dir deine Pointer, Arrays etc. an.



  • Sieht so aus, ist aber nicht der Fall.
    Sobald das Programm in die Methode springt ist der "this" pointer = NULL, in anderen Methoden funktioniert es ganz normal.

    Glaubt ihr mir jetzt endlich, dass es kein Fehler im Code ist? ES HAT IM G++ DOCH FUNKTIONIERT. 😑

    Ich habe zum Testen ein Feld von 10 mal 10 feldern, die alle mühelos ausgegeben werden. Ein Feld ist eine Klasse mit Datenelementen, die alle Daten mit 0 initialisiert.

    Ich dachte auch erst, dass es daran liegen könnte, dass m_type nicht angelegt wird, da nur die Funktionen verbuggt zu sein scheinen, die darauf zugreifen. Habe ich den Aufruf geändert, kam immernoch der Fehler. Später dann im Debugger bemerkt, dass this = NULL ist und somit alle anderen Klassenvariablen ungültig sind (mit ??? versehen).



  • Hallo

    Glaubt ihr mir jetzt endlich, dass es kein Fehler im Code ist? ES HAT IM G++ DOCH FUNKTIONIERT. 😑

    Das beweist nur das du mit dem G++ mehr Glück mit ungültigem Code hattest als mit dem Borland-Compiler. Denn nur weil etwas läuft heißt das noch lange nicht das es sauber ist. Das Problem bei ungültigem Code mit undefiniertem Verhalten ist nunmal das es auch "gutgehen" kann... und wo anders abstürzt.

    Klar ist jedenfalls das du die besagte Methode über einen Zeiger mit dem Wert NULL aufrufst, und das liegt an deinem Code. Also benutzt endlich den Debugger und schau wo die Methode aufgerufen wird, und verfolg den Aufruf immer weiter zurück.

    bis bald
    akari



  • Leg doch bitte mal dieKarte dynamisch an (mit dem new operator). Hatte solch merkwürdiges Verhalten auch mal mit einen statischen Array gehabt.



  • Reduziere dein Projekt doch mal so weit wie möglich (auskommentieren des anderen Codes) bis es funktioniert.



  • Hallo

    Solches "merkwürdige Verhalten" ist in den meisten Fällen die Folge von ungültigem Code. Und bevor man an Fehler beim Compiler glaubt und irgendwelche obskuren Workarounds einbaut die vielleicht laufen oder auch nicht, sollte man lieber die Ursache im eigenem Quellcode suchen. Ja das ist manchmal hart und nervend, weil man auch Code durchschauen muß bei dem man schwört das er fehlerfrei sei.

    bis bald
    akari



  • ALSO LEUTE.

    Ich geb's auf. Ihr checkt's einfach nicht.
    Ich bin KEIN Anfänger und ich bin NICHT dumm.

    Wer will, der kann die Relevanten Daten des Projekts von mir haben und es selber ausprobieren. Ansonsten verabschiede ich mich von hier, die "Hilfe" muss ich mir nicht weiter geben.

    Also meine email Adresse, falls es hier jemanden gibt, der lesen kann, ist manu-lg@hotmail.de.

    bis denne.



  • Hallo

    Ihr checkt's einfach nicht.

    Wir müßen gar nichts "checken". Das ist dein Projekt, du hast (hoffentich) schließlich den besten Überblick. Es gibt eben Fehler die können auch wir hier im Forum nicht aus ein paar Zeilen Code heraus sofort finden.

    Ich bin KEIN Anfänger und ich bin NICHT dumm.

    Niemand hier hat behauptet das du dumm seist oder ein Anfänger. Alle hier wollten dir ernsthaft mit ihren Wissen helfen.
    Nur es ist dein Problem wenn du unsere Hilfe nicht ernstnimmst. Du wurdest zum Beispiel mehrmals ernsthaft auf Null-Pointer und den Debugger hingewiesen. Mehr können wir dazu eben nicht sagen, ohne wild zu spekulieren.
    Da du aber als einzigstes Ergebnis deines Debuggers herausgefunden hast das this in der Methode NULL ist zeugt nun mal davon das du mit dem Debugger selber wenig Erfahrung hast.

    bis bald
    akari



  • Manu (Gast) schrieb:

    Ich geb's auf. Ihr checkt's einfach nicht.
    Ich bin KEIN Anfänger und ich bin NICHT dumm.

    Check' lieber mal die Kompilereinstellungen (Aufrufkonventionen : __stdcall, __cdecl).

    Dann findest Du den this-pointer auch wieder. Altbekanntes Thema : "Mein Kompiler und die Default's".



  • Hallo

    merker schrieb:

    Check' lieber mal die Kompilereinstellungen (Aufrufkonventionen : __stdcall, __cdecl).

    Dann findest Du den this-pointer auch wieder. Altbekanntes Thema : "Mein Kompiler und die Default's".

    😕 Was haben Aufrufkonventionen mit this-Zeigern zu tun?

    bis bald
    akari


Anmelden zum Antworten