ERLEDIGT
NEIN
NEIN
ANTWORTEN
11
11
ZUGRIFFE
271
271
EMPFEHLEN
-
Hallo,
ich habe vor einer Woche meine IDE von Dev-C++ auf die neue Code::Blocks 10.5 umgestellt.
Beim compilieren von meinen "alten" Programmen, die ich in Dev-C++ geschrieben habe, bekomme ich keine Fehlermeldung, allerdings funktioniert trotzdem nicht alles so, wie es soll.
Konkret: Ich habe eine char-Varriable vordefiniert.
Code cpp:1
char cLaufwerkmaske[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
und im laufe des Programms greife ich darauf wie folgt zu:
Code cpp:1 2 3 4
string stBuchstabe; int iZahl = 5; stBuchstabe = cLaufwerkmaske[iZahl];
Wenn ich es mit dem alten Compiler von Dev-C++ compiliert habe, hat es super geklappt. Ich hatte in der Varriable stBuchstabe den jeweiligen Buchstaben.
Wenn ich es jetzt mit dem neuen Compiler von Code::Blocks compiliere, dann steht nichts mehr in der Varriable Buchstabe drin.
Es gehen jetzt auch neue sachen wie z.B.
Der alte Compiler hat bei so etwas immer reklamiert. Anscheinend haben die im Compiler was geändert.Code cpp:1
Buchstabe = cLaufwerkmaske;
Meine Frage nun, wie bekomme ich die Buchstaben von cLaufwerkmaske wieder einzeln in meine Varriable stBuchstabe?
Vielen Dank schon mal
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
Dann geht irgendwo anders was schief. Kannst du trotzdem mal testen, ob das folgende Minimalbeispiel bei dir wie erwartet "F" ausgibt?
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include <iostream> #include <string> int main() { char cLaufwerkmaske[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; std::string stBuchstabe; int iZahl = 5; stBuchstabe = cLaufwerkmaske[iZahl]; std::cout << stBuchstabe << std::endl; return 0; }
Das funktioniert zurecht, denn das ist absolut gültiges C++ (unter der Annahme, dass Buchstabe ein std::string ist).
Grüße,
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
-
OK. Also das kleine Beispiel funktioniert. Ich such jetzt mal nochmal genau meinen Code durch, aber das sind inzwischen 12.000 Zeilen. Eigentlich hab ich daran nichts geändert, melde mich dann, wenn ich was gefunden habe.
Ja Beispiel ist ein std::string. Aber mein alter Compiler hat damal trotzdem reklamiert.
Danke schon mal
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
Also, ich hab jetzt nochmal meinen Code durchgeschaut und keinen Fehler gefunden. Den Code hab ich jetzt auch nochmal vom Dev-C++ compilieren lassen und da geht es wieder. Da gibt er mir den richtigen Buchstaben aus. Nehm ich den genau gleichen Code, ohne irgendein Zeichen zu verändern, und lasse ihn im Code::Blocks compilieren, geht es nicht. Ich weiß nicht was ich noch machen kann. Im Code::Blocks verwende ich momentan den MinGW32-gcc-4.5.2 und im Dev-C++ den MinGW-gcc-3.4.2.
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
24.09.11 22:08 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.Wie prüfst du das denn? Debugger benutzt?
Vermutlich hast du irgendwelchen Speicher zerstört, was undefiniertes Verhalten auslöst. Benutze einen Memory Debugger wie z.B. Valgrind unter Linux.
Ansonsten läßt sich das auch mit etwas ASCII Arithmetik einfacher lösen:
GrußCode cpp:1
std::string s(1, 'A' + zahl);
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Also, ich habe es nicht mit einem Debugger probiert, sonder auf meinem Laptop die Dev-C++ IDE installiert und auf dem des Compilieren lassen unter Windows. Und auf meinem Rechner hier habe ich Code::Blocks. Und das Programm funktioniert wenn ich es unter Dev-C++ compilieren lasse.
Bin aber durch viel rumprobieren auf neue Erkenntnise gekommen:
1. Ich verwende den Zugriff auf die char-Varriablen öfters im Programm und von 10 stellen, macht es an nur 5 Problemen. Habe es soweit eingegrenzt, dass wenn ich die 5 Problem-Stellen (nur den Zugriff auf die Varriable) auskommentiere, funktioniert des Programm unter Code::Blocks.
Hab jetzt auch rausgefunden was an den 5 Stellen anders ist, wie an den anderen Stellen wo es klappt.
An den 5 Problem-Stellen mache ich eine gwisse Anzahl an if-else-Abfragen mehr, als an den anderen stellen im Programm. Wenn ich ein paar else-Anfragen (die if-Abfrage kann stehen bleiben) auskommentiere, klappt das Programm auch mit dem Varriablen-Zugriff.
Ich versteh da aber die Welt nicht mehr, warum der Compiler, bei zuvielen (sind 9 if-else-Abfragen und eine switch-case noch davor) Abfragen Probleme mit dem Varriablen-Zugriff hat. Sobald ich 2 else-Abfragen aukommentiere, funktioniert das Programm.
Das beste ist ja auch, dass der Varriablen-Zugriff an den Problem-Stellen keinerlei einfluss auf die Funktion hat, wo dann der Varriablen-Zugriff nicht klappt.
Ist verdammt verwirrent die ganze Sache, aber ich glaube dafür gibt es fast keine Lösung. Vllt hat ja doch schon mal jemand mit dem Problem zu tun gehabt.
P.S.: Ich versuche jetzt mal noch den neuesten Borland-Compiler, ob es mit dem geht.
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
Hallo,
Ist die IDE für den Borland-Compiler nicht kostenpflichtig? Versuchs doch mal mit Visual Studio, da kannst mit der Express kostenlos arbeiten.
-
Suche grad nur den Borland-Compiler, nicht die IDE. Die IDE ist kostenpflichtig, aber der Compiler glaub ich nicht.
Wenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
25.09.11 11:33 #9
@Crash Kid
Ist Dev nicht total veraltet? Warum hast du es eigentlich bis jetzt noch benutzt?Fehlermeldung bitte!
Google - Dein Freund und Helfer
-
25.09.11 15:18 #10
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Nochmal: Es liegt nicht am Compiler, sondern an deinem Code (wie du eigentlich selbst gerade festgestellt hast). Du machst da irgendeinen "Mist" und es ist reiner Zufall ob es funktioniert oder nicht.
Zielführend wäre es einen Memory Debugger zu verwenden. Oder ein Minimalbeispiel zu erstellen wo der Fehler reproduzierbar ist.
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ich hab schon versucht ein Minimalbeispiel zu schreiben und den Fehler zu reproduzieren, ist mir aber bis jetzt noch nicht gelungen.
@MSVCplusplus: Ich hab DEV-C++ bis jetzt verwendet, weil ich seit 6 Jahren mit dem Programmiert habe und ganz gut zurecht kam, aber jetzt stell ich halt auf einen neuen Compiler und IDE um.
@deepthroat: So ganz kann das auch kein Zufall sein, weil es ja mit dem alten Compiler immer geht und mit dem neuen nie. Ich schau mal nach nem Memory Debugger und melde mich nochmal.
Danke an alle
grüßeWenn meine Antwort nützlich bzw. hilfreich war, würde ich mich sehr über eine Bewertung bzw. ein Danke sehr freuen.
Danke euch
Programmiere in C, C++ auf Windows XP, Vista und Windows 7
Spezialisiert auf Netzwerkprogrammierung, WinAPI uvm.
-
25.09.11 20:22 #12
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Ein Compiler arbeitet letztendlich immer deterministisch (wie jedes andere Programm auch). Somit produziert der eine Compiler aus einem Programmtext welcher undefiniertes Verhalten zur Folge hat Maschinencode mit jenem (erwartetem) Verhalten, ein anderer Compiler nicht.
Evtl. sieht man ja bereits in dem Codestück welches du identifiziert hast etwas.
GrussIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
Ähnliche Themen
-
Ant compiliert nicht kompletten Code
Von Klopfer im Forum JavaAntworten: 2Letzter Beitrag: 01.05.09, 19:29 -
Hin und wieder Warnung vom Kompiler
Von Tyg3r im Forum C/C++Antworten: 5Letzter Beitrag: 04.10.07, 12:48 -
Kompiler Warnung
Von norline im Forum C/C++Antworten: 6Letzter Beitrag: 04.05.07, 14:48 -
Eclipse compiliert nicht mehr
Von GartenUmgraben im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 1Letzter Beitrag: 22.12.05, 00:40 -
compiliert nicht !
Von sabine im Forum C/C++Antworten: 8Letzter Beitrag: 23.05.02, 16:53





Zitieren

Login






