c++: EXC_BAD_ACCESS bei fkt-aufruf anderer klassen

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von grizto, 28.03.2007.

  1. grizto

    grizto Thread Starter MacUser Mitglied

    Beiträge:
    398
    Zustimmungen:
    9
    MacUser seit:
    27.11.2004
    Morgen

    Ich hab ein seltsames Problem, mit dem ich nicht weiterkomme, vor allem wenn man als sonst Java-progger c++ macht, und aufeinmal kommt der speicher ins spiel ;)

    Wenn in unserem Schachprogramm (rund 32 klassen, qt, opengl, openal) eine Klasse ein Funktion einer anderen Klasse, also zur Laufzeit eher eines anderen objekts aufruft, beendet sich die app und der bericht zeigt follgendes

    anscheinend will er auf einen speicherbereich zugreifen, auf den er nich zugreifen darf.
    Das geschieht zBsp, wenn unsere Kontrollklasse, ein Textlabel der GUI ändern will. Aber die selbe kotntrollklasse kann ein Textfeld in der GUI klasse problemlos ändern.
    ebenso stürzt es ab, wenn die Kontrollklasse auf die Schnittstellenklasse der KI zugreift
    Schmeisse ich die Labeländerung sowie den zugriff auf die Schnittstellenklasse raus (was den spielspaß mindert ;) ) funktioniert alles.


    Das Programm läuft ohne Probleme unter Linux (zum glück ist das für den Prof entscheidend) aber ich hätte es nunmal gerne auch bei mir zum laufen gebracht.
     
    Zuletzt bearbeitet: 28.03.2007
  2. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Erste Frage: Rufst Du eine KLASSENmethode, oder eine INSTANZmethode auf?

    Wenn es eine Instanzmethode ist, dann ist der übliche Fehler, dass das Objekt nicht (mehr) existiert, oder der Pointer zu dem Objekt falsch gesetzt ist.

    Alex
     
  3. grizto

    grizto Thread Starter MacUser Mitglied

    Beiträge:
    398
    Zustimmungen:
    9
    MacUser seit:
    27.11.2004
    ja, sorry etwas missverständlich ausgedrückt

    Wir haben das ganze als Singleton realisiert, sprich, die funktionen werden immer über getInstance aufgerufen.
    Also werden schon Instanzmethoden aufgerufen, allerdings einer statischen instanz, und eine null pointer exception kann eigentlich nich kommen, denn falls das objekt nicht mehr besteht, wird ja ein neues erstellt, oder?

    der klassenentwurf, und auch die entscheidung das singleton pattern zu verwenden, stammt nicht von mir :)
     
  4. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Gut, aber ich würde mir mal genau ankucken was da in dem Pointer auf Dein Singleton Objekt drinsteht.

    Alex
     
  5. grizto

    grizto Thread Starter MacUser Mitglied

    Beiträge:
    398
    Zustimmungen:
    9
    MacUser seit:
    27.11.2004
    ok, werd ich tun

    was das ganze seltsam macht, ist, das ein methoden zugriff auf das objekt geht, und ein anderer nicht.

    ich mochte c++ noch nie ;)
     
  6. autoexec.bat

    autoexec.bat MacUser Mitglied

    Beiträge:
    2.130
    Zustimmungen:
    20
    MacUser seit:
    21.01.2005
    Ohne Code kann man da natürlich schlecht was sagen, aber hast du das Programm denn mal durch den Debugger gejagt? Damit lassen sich solche Fehler doch meißtens schnell finden. ;)
     
  7. grizto

    grizto Thread Starter MacUser Mitglied

    Beiträge:
    398
    Zustimmungen:
    9
    MacUser seit:
    27.11.2004
    wenn ich später zuhause bin, werde ich mal nach der anleitung http://qtnode.net/wiki/Qt4_with_Xcode das project versuchen nach XCode zu verfrachten, um mal debuggen zu können
    auf dem ibook hier wollte er das nicht machen ("zu alte xcode version...")

    ich halte euch auf dem laufenden, auch wenn es euch nich interessiert ;) :p
     
  8. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Wichtig ist nur mit -g zu kompilieren, dann sind symbole drin.

    Dann geht es auch mit Kommandozeilen gdb. Old School rules.

    Alex
     
  9. grizto

    grizto Thread Starter MacUser Mitglied

    Beiträge:
    398
    Zustimmungen:
    9
    MacUser seit:
    27.11.2004
    der xcode import hatte mit dem neuerem xcode auf dem imac direkt geklappt (wirklich super, gut dass ich das jetzt merke, nachdem das projekt vorbei ist ;) )

    Das Prog hatte intesive Probleme, beim zugreifen auf die Datenelemente der Singleton Objekte.
    Das ich dieses Singleton-Kram eh nich mochte, hab ich das alles rausgeworfen und ordentlich Objekte gebaut, und die an die gebrauchten Stellen weitergegeben.
    Und siehe da, es funzt.

    also, wie vermutet, die Pointer zeigten ins nirgendwo.
    danke für die umfangreiche hilfe :)
    sogar die libexecstream, die einer von uns verwendet hat,um mit der KI zu kommunizieren funktioniert tadelos, unix sei dank :)

    MfG

    griz
     
  10. below

    below MacUser Mitglied

    Beiträge:
    13.882
    Zustimmungen:
    1.086
    MacUser seit:
    15.03.2004
    Das tut mir wirklich leid. Rummst, knackst oder wummert es vielleicht auch?

    Alex
     
Die Seite wird geladen...

Diese Seite empfehlen