Undefiniertes Verhalten - eine Anekdote einer Coding-Session
-
Hiho,
ich wollte mal ein kleines Happening beschreiben, welches mir heute widerfahren ist. Man könnte sagen ich habe heute festgestellt (obwohl ich ja schon viel kannte), was undefiniertes Verhalten wirklich ist.
Der Hintergrund:
Ich schreibe ein Plugin für VDR (Video Disk Recorder), welches dazu dient am Fernseher DVDs aus Aufzeichnungen zusammenzustellen und vom Rechner brennen zu lassen. Wichtig ist eigentlich nur dass es in "C mit Klassen" geschrieben ist (also C++, aber fast nur C-Standardbibliothek in eigene Klassen gewrapped, Strings werden als const char* übergeben und - zumeist - kopiert). Mein Plugin hingegen benutzt die Standardbibliothek ausgiebig.Die Situation:
Am OSD des Fernsehers sieht man eine Liste von wenigen Aufnahmen und ein paar Optionen bezüglich der DVD. Dazu zwei farbige Rechtecke in denen Kommandos ("Brennen", "Löschen") stehen sollen. Nun steht dort, mit einem mal, plötzlich ein Text aus einer ganz anderen Ecke des Codes (genaugenommen nichtmal aus meinem Plugin). Völlig baff schaue ich ins Logfile, dort meldet VDR mir "No translation found for 'What's on at Prime Time?'" - WTF, woher kommt denn das? (Anmerkung: das Wort "Prime" kommt im gesamten Sourcecode von VDR und allen Plugins nicht vor).Die Lösung:
Nach einigen anstrengenden Tagen fand ich im Source des VDR Kerns einen folgenschweren Kommentar:// strings are NOT copied - must be constants!!!
Dort wo die Texte für die farbigen Buttons gesetzt werden. In der Implementierung. Anders als an fast allen anderen Stellen wird hier nicht kopiert.
Ziemlich ernüchtert habe ich dann sofort geschaltet dass es eine dumme Idee ist dem Texte zu übergeben, die aus const char* std::string::c_str() stammen. Woher das "Prime Time" kommt, rätsel ich jetzt noch.
Nunja, nachdem ich etwas Abstand von dem ganzen hatte, hat mich das ganze im Nachhinein ziemlich amüsiert (jaja, gut dass der Rechner nicht explodiert ist :D), vielleicht kann es den ein oder anderen von Euch auch erheitern
-
LordJaxom schrieb:
ein kleines Happening
Hoffentlich nicht dein Ernst, oder?
-
Find ich ganz lustig.
Sowas hatte ich auch schonmal,
ich hatte nen error in einer datei wo eigentlich nix drinstand
Außer ein include in dem include gab es aber weder denn betreffenden Fehler noch sonst was nur einen weiteren include in dem ich dann schlussendlich herausfand das ein ; gefehlt hat.
2 Tage hatte ich gesucht um festzustellen das ich in der falschen datei war.
PS: Vielleicht hat er den übergebenen String dann doch irgendwie verarbeitet und zufälliger weise kamm eins innvolles wort raus.
-
Michael E. schrieb:
Hoffentlich nicht dein Ernst, oder?
Doch, mein voller Ernst.