C Programm läuft auf anderem Rechner falsch
Hi,
Ich habe ein Programm in C geschrieben, welches auf meinem Laptop in einer virtuellen Maschine (i386) läuft.
Auf meinem Desktop-Pc (OpenSuse) muss ich das Programm neu kompilieren, weil es sich hier um eine andere Architektur (x86_64) handelt. Und dann klappt das Programm nicht mehr richtig.
In dem Programm wird ein Sortieralgorithmus implementiert.
Was könnte an den Systemen unterschiedlich sein, das das ganze nicht mehr richtig funktionieren lässt?
Das Programm führt nur einige Arbeit auf Char-Arrays (Strings) aus (strcmp & strdup), arbeitet sonst mit integern und schreibt in eine Datei.
Ich habe ein Programm in C geschrieben, welches auf meinem Laptop in einer virtuellen Maschine (i386) läuft.
Auf meinem Desktop-Pc (OpenSuse) muss ich das Programm neu kompilieren, weil es sich hier um eine andere Architektur (x86_64) handelt. Und dann klappt das Programm nicht mehr richtig.
In dem Programm wird ein Sortieralgorithmus implementiert.
Was könnte an den Systemen unterschiedlich sein, das das ganze nicht mehr richtig funktionieren lässt?
Das Programm führt nur einige Arbeit auf Char-Arrays (Strings) aus (strcmp & strdup), arbeitet sonst mit integern und schreibt in eine Datei.
Was für ein Os hast du denn in deiner VM? Falls es Windows ist, könnte es sein, dass du Windowsspezifische Funktionen oder Bibliotheken nutzt, und dass es daher nicht unter dem Linux deines Desktops Funktioniert...
Im Übrigen bin ich der Meinung, dass Karthago zerstört werden muss.
Mit freundlichen Grüßen
Don_Jo
Mit freundlichen Grüßen
Don_Jo
Werden funktionen mit Pointervariablen aufgerufen? Es könnten sich Threads die Inhalte wegnehmen.
Wenn du mit c arbeitest wäre es ratsam sich in entsprechenden Foren zu registrieren. Ich selber bin in weiteren 20 foren registriert.
PS Die integer werden in 64-bit enthalten anstatt 32 bit, entsprechend verschiebt sich die 0 nach >> 32 oder << 32.
Wenn du mit c arbeitest wäre es ratsam sich in entsprechenden Foren zu registrieren. Ich selber bin in weiteren 20 foren registriert.
PS Die integer werden in 64-bit enthalten anstatt 32 bit, entsprechend verschiebt sich die 0 nach >> 32 oder << 32.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »nocturne« (5. Juni 2010, 11:11)
Ich kann mich krueschta nur anschließen.
Je nach dem mit welchen Datentype du arbeitest oder bestimmter Variablen über die Pointerarthmetik adressierst kann es sein das dein Programm die Daten oder Adressbereiche falsch verwaltet.
Bei den meisten Compilern lässt sich dies jedoch einstellen, oftmals stehen Datentypen sowohl als 16- 32- oder 64-Bit-Version zur Verfügung. Es kann auch sein dass es für die Basisfunktion strcmp in der verwendeten Programmbibliothek auch eine 64-Bit Version gibt.
Je nach dem mit welchen Datentype du arbeitest oder bestimmter Variablen über die Pointerarthmetik adressierst kann es sein das dein Programm die Daten oder Adressbereiche falsch verwaltet.
Bei den meisten Compilern lässt sich dies jedoch einstellen, oftmals stehen Datentypen sowohl als 16- 32- oder 64-Bit-Version zur Verfügung. Es kann auch sein dass es für die Basisfunktion strcmp in der verwendeten Programmbibliothek auch eine 64-Bit Version gibt.
Es ist für die analyse eine Programms einfach nicht möglich mit so einer kurzen Beschreibung zu starten...
Folgende Möglichkeiten:
- du lädsts das Problemfile hoch, ich würds mir durchlesen (interessehalber)
- du beschreibst genau was dein Programm tun sollte und was es tut wenns falsch läuft.
- gibt zu debugzwecken an verschiedenen Stellen die Variablenwerte aus, bzw. steppe langsam mit dem debugger durch (dieser Punkt funktioniert zu 99%)
EDIT: Ein paar tippfehler korrigiert
Folgende Möglichkeiten:
- du lädsts das Problemfile hoch, ich würds mir durchlesen (interessehalber)
- du beschreibst genau was dein Programm tun sollte und was es tut wenns falsch läuft.
- gibt zu debugzwecken an verschiedenen Stellen die Variablenwerte aus, bzw. steppe langsam mit dem debugger durch (dieser Punkt funktioniert zu 99%)
EDIT: Ein paar tippfehler korrigiert
wischipedia - http://wischenbart.org/wwa (einfach mal vorbeischaun)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »wischi« (18. Juli 2010, 14:20)
PS Die integer werden in 64-bit enthalten anstatt 32 bit, entsprechend verschiebt sich die 0 nach >> 32 oder << 32.
Nein, das ist compiler abhängig. Der C Standard lässt auch beim INT große Freiheiten, sodass ein int auf x64 immernoch 32Bit lang sein kann.
Interessanter ist die Frage, welche Compiler verwendet wurden. Der VCC hat seine Eigenarten, so auch der GCC - führt dann öfters mal zu abstrusen Fehlern.
Wie schon wischi sagte: Wenn es geht code hochladen, SAMT compilersettings.
Aktuell nutze ich: Windows, Linux, MacOS X, Solaris...weil die Welt nicht nur S/W ist!
Blog
Blog
Ähnliche Themen
-
Kaufberatung »-
Wie findet ihr diesen PC?
(23. Juni 2007, 15:51)
-
Hardware »-
Kein Bildsignal
(7. August 2005, 21:25)
-
Archiv: Betriebssysteme »-
Win98 - Rechner automatisch herunterfahren
(24. Juni 2004, 13:40)
-
eigener Server »-
mysql tot
(5. Juni 2003, 22:18)


