tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
11
ZUGRIFFE
271
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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.
    Code cpp:
    1
    
    Buchstabe = cLaufwerkmaske;
    Der alte Compiler hat bei so etwas immer reklamiert. Anscheinend haben die im Compiler was geändert.

    Meine Frage nun, wie bekomme ich die Buchstaben von cLaufwerkmaske wieder einzeln in meine Varriable stBuchstabe?


    Vielen Dank schon mal

    grüße
     
    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.

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von Crash Kid Beitrag anzeigen
    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.
    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;
    }

    Zitat Zitat von Crash Kid Beitrag anzeigen
    Es gehen jetzt auch neue sachen wie z.B.
    Code cpp:
    1
    
    Buchstabe = cLaufwerkmaske;
    Der alte Compiler hat bei so etwas immer reklamiert. Anscheinend haben die im Compiler was geändert.
    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

  3. #3
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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üße
     
    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.

  4. #4
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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üße
     
    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.

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Crash Kid Beitrag anzeigen
    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.
    Wie prüfst du das denn? Debugger benutzt?
    Zitat Zitat von Crash Kid Beitrag anzeigen
    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.
    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:
    Code cpp:
    1
    
    std::string s(1, 'A' + zahl);
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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üße
     
    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.

  7. #7
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Ist die IDE für den Borland-Compiler nicht kostenpflichtig? Versuchs doch mal mit Visual Studio, da kannst mit der Express kostenlos arbeiten.
     

  8. #8
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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.

  9. #9
    Avatar von MSVCplusplus
    MSVCplusplus MSVCplusplus ist offline Mitglied Brokat
    Registriert seit
    Dec 2010
    Ort
    Hessen
    Beiträge
    336
    @Crash Kid
    Ist Dev nicht total veraltet? Warum hast du es eigentlich bis jetzt noch benutzt?
     
    Fehlermeldung bitte!
    Google - Dein Freund und Helfer

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Crash Kid Beitrag anzeigen
    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.
    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.

  11. #11
    Crash Kid Crash Kid ist offline Mitglied Gold
    Registriert seit
    Jan 2009
    Beiträge
    147
    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üße
     
    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.

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Crash Kid Beitrag anzeigen
    @deepthroat: So ganz kann das auch kein Zufall sein, weil es ja mit dem alten Compiler immer geht und mit dem neuen nie.
    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.

    Gruss
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Ant compiliert nicht kompletten Code
    Von Klopfer im Forum Java
    Antworten: 2
    Letzter Beitrag: 01.05.09, 19:29
  2. Hin und wieder Warnung vom Kompiler
    Von Tyg3r im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 04.10.07, 12:48
  3. Kompiler Warnung
    Von norline im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 04.05.07, 14:48
  4. Eclipse compiliert nicht mehr
    Von GartenUmgraben im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 1
    Letzter Beitrag: 22.12.05, 00:40
  5. compiliert nicht !
    Von sabine im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 23.05.02, 16:53