Buffer-problem In C++, Kryptische Zeichen & Absturz [FLTK]
-
Hallo,
ich bin neu hier, und hab auch gleich ein Problem wo ich nicht weiter weiß
ich verwende Dev-C++ mit FLTK:
Das Widget Fl_Text_Display gibt ja mittels einer Bufferfunktion den Text aus, normalerweise funktioniert das auch bei den Beispielen von Erco, leider aber nicht bei folgender Implementierung:ShowResults Show; Fl_Text_Buffer *buff2; Fl_Text_Display *disp2; void CB_button_calc(Fl_Widget*, void*) { if((check == true) && (riseset == false)) { string outere = Show.Ephemeris(Fecha, Sec, Location, local, dataset); buff2->text(String2char(outere)); } } int main(int argc, char ** argv) { Fl::visual(FL_DOUBLE|FL_INDEX); win_main = new Fl_Double_Window(50, 50, 840, 600); buff2 = new Fl_Text_Buffer(); disp2 = new Fl_Text_Display(0, 210, 840, 370); disp2->buffer(buff2); buff2->text(""); }
Show.Ephemeris(Fecha, Sec, Location, local, dataset) ... greift auf eine Funktion zu in der verschiedene Dinge berechnet werden und die Ergebnisse werden in folgender Form zusammengeschustert:
... output_data += Double2str(fabs(desec), 1) + "\""; ... output_data += "\n------------------------------------------FINISHED-DATASET"; return output_data;
Die Ausgabe bringt teilweise komische Zeichen hervor und die Anwendung stürzt bei wiederholter Ausgabe im selben Fenster ab (also wenn Funktion + Ausgabe erneut übe einen Button aufgerufen wird)
Die Ausgabe beginnt mit:
-------Þ¦
meist am Anfang einer komplexeren Zeichenkette kommen ca. 10 kryptische Zeichen und dann erscheint der Rest der Ausgabe normal, nur leider stürzt das Programm bei erneutem Benutzen dieses Buffers ab.
Ich hab den Verdacht dass der Buffer einfach voll ist, da die Ausgabe funktioniert wenn ich den Rück-/Ausgabe-String der Funktion Ephemeris künstlich verkürze ... aber dann fehlen mir ja wichtige berechnete Ergebnisse ... ich habe die Größe vorher auch nirgends definiert, war bei den Beispielen die ich verwendete auch nicht der Fall.
Compiler meldet auch nichts
Hat jemand vielleicht nen Schimmer was hier passiert und wie man es beheben könnte?
Grüße,
du ciel
-
Hast du dir den Ausgabestring mal im Debugger angesehen? Ansonsten: Wie sieht denn die "String2char()" Funktion aus?
-
Hi,
also die Funktion sieht folgendermaßen aus:
const char* String2char(string s) { string outstring; stringstream outstream; outstream << s; outstring = outstream.str(); return outstring.c_str(); }
Wegen der Ausgabe im Debugger: damit hab ich mich grad zum ersten mal befasst und weiß nicht genau was mir das sagen soll.
Die Ausgabe im Programm sieht bei Ausführung mittels "Fehlersuche" folgendermaßen aus:
ðºðºðº...
also komplett anders, ohne Zeilenumbrüche und nur kryptische Zeichen.
das Debugger-Fenster sagt mir hingegen u.a.:
frames-invalid
...
Segementation fault
...(kanns nicht herauskopieren)
-
du ciel schrieb:
const char* String2char(string s) { string outstring; stringstream outstream; outstream << s; outstring = outstream.str(); return outstring.c_str(); }
Warum einfach, wenn's auch kompliziert geht
Die Funktion kann direkt auf einen Einzeiler verkürzt werden:
const char* String2char(const string& s) { return s.c_str(); }
-
Klasse!! es scheint zu funktionieren ... aber was war nun der Fehler? ... lag es an dem "vergessenem" const?
jedenfalls danke! nun kann ich weiter machen