1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C++ Segmentationfault Klassen / Membervariablen und Strukturen...

Dieses Thema im Forum "OS X-Developer" wurde erstellt von klaute, 22.12.05.

  1. klaute

    klaute Gast

    Hallo zusammen,

    ich habe arbeite seit längerem an einem Spiel unter Linux und habe für dieses einen Viewer für das .ac Dateiformat (www.ac3d.org) geschrieben.
    Die Software ist in C++ geschrieben und alle funktioniert unter Linux bestens.

    Unter Mac OSX (tiger) mit Xcode 2.2, darwinports (libsdl, libsdl_ttf, glib-2.0 benötigt) kann ich nach ein paar Anpassungen, wie Frameworks einbinden, mein Projekt auch kompilieren.

    Jetzt zum Problem...

    Ich habe eine Klasse AC3DImport mit vielen privat Variablen Zeigern etc. .
    Im Konstruktor kann ich diese mit werten belegen und alles tun was ich möchte.

    In sämtlichen Methoden der Klasse ist nicht möglich auf eine dieser Variablen zuzugreifen, es spielt keine Rolle ob ich diese privat,protected oder public deklariere. Ich bekomme bei jedem Zugriff einen Segfault.
    Die Variable die den Fehler erzeugt ist nach den Kompilierläufen meist unterschiedlich.

    Ich habe bereits mehrere Stunden damit verbracht zu debuggen und in google zu suchen...
    Eine Meldung in einem anderen Forum lautet, dass man auf XCode 2.2 umstellen soll falls soetwas passiert. Ich kompiliere meine Software jedoch nicht innerhalb eines XCode Projektes sondern mit einem Makefile auf der Kommandozeile, hat also keinen Effekt.
    Ich verwende den gcc-4.x habe aber auch schon alle anderen getestet, kein Erfolg.

    Zum testen ein Beispielprogramm geschrieben, dass die gleiche Sache tut.
    Dann funktioniert alles bestens.

    Hier die Fehlermeldung vom gdb ...

    ---
    Programm received signal EXC_BAD_ACCESS, Could not access memory.
    Reason: KERN_INVALID_ADDRESS at address: 0xa1b1e027
    AC3DImport::setObjectLoc(this=0xa1b1c1d3, f1=0, f2=0, f3=0 ) at ../ac3dimport.cpp:434
    434 if ( brother != 0 )
    ---

    Unter http://www.digital-dreaming.de/download/dev/gnuracing/gnuracing.tgz kann
    eine noch nicht für OSX angepasste (wenn auch was das Spiel selbst angeht veraltete) Version heruntergeladen werden.
    Das Paket enthält jedenfalls eine aktuelle Version der betroffenen Klasse(n).
    Im Sourcen-Verzeichniss existiert ein Ordner test, in dem der Viewer
    abgelegt ist falls es sich jemand direkt ansehen möchte...

    Würde mich über eine Antwort freuen!

    Danke,
    klaute
     
  2. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    Hallo,

    du kompilierst auf einem Rechner mit mehr als 2GB RAM?

    mfg pi26
     
  3. klaute

    klaute Gast

    Hi,

    ich kompilire mit 1,25 GB Ram... hm...
    Gibt es da probleme?

    klaute
     
  4. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297

    war nur mal so eine ganz grobe Vermutung, dass irgend ein Programmteil des Compilers ein problem mit der 2GB-Grenze haben könnte. Die Adresse 0xa1b1e027 wäre nämlich jenseits 2 GB (falls sie von links nach rechts interpretiert wird, was ich aber in deiner Konstellation auch nicht weiss)

    mfg pi26
     
  5. klaute

    klaute Gast

    Ich denke, dass es von links nach rechts interpretiert wird... bin mir aber nicht sicher!

    Also ich habe diese gcc's installiert (alle aus Xcode) und auch alle getestet aber keiner bringt ein befriedigendes Ergebniss...
    gcc-3.3
    gcc-4.0
    gcc2
    gcc3

    mit gcc2 kann das Programm garnicht kompiliert werden.

    Die Frage ist ob es vllt eine option gibt die man setzen muss?!

    Danke,
    klaute
     
  6. pi26

    pi26 Adams Parmäne

    Dabei seit:
    17.12.04
    Beiträge:
    1.297
    leider kann ich nicht viel mehr als diese Anhaltspunkte bieten, weil ich meine C- und Assembler-Erfahrung vorwiegend auf ThinkC und Codewarrior gemacht habe.
    Sehe es aber am ehesten als ein pointerarithmetisches Problem.

    mfg pi26
     

Diese Seite empfehlen