• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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

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
 

pi26

Adams Parmäne
Registriert
17.12.04
Beiträge
1.297
Hallo,

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

mfg pi26
 

klaute

Gast
Hi,

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

klaute
 

pi26

Adams Parmäne
Registriert
17.12.04
Beiträge
1.297
klaute schrieb:
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 )


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
 

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
 

pi26

Adams Parmäne
Registriert
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