012
30.09.2005, 13:26 Uhr
virtual
Sexiest Bit alive (Operator)
|
Zitat von ~nakaa11: |
virtual, filename ist ein static char *, private variable eines externen objekts einer classe.
Änderung in stringstream klassen:
Code: |
void error_output_class::tofile(char *name){ (*this).flush(); ostringstream merr_name(ostringstream::out);; merr_name<<"merr"; merr_name<<"\0"; //delete[] filename; filename=merr_name.str().c_str(); }
|
|
Dann ist das ein schwerwiegender Programmierfehler: "merr_name.str().c_str();" Darf man nicht machen, weil str() nur ein temp. Objekt zurüclkgibt und c_str() dann in den Wald zeigt. Es wäre besser entweder filename zu einem std::string zu machen (was implizit eine Kopie vom Rückgabewert von str() macht) oder aber - falls dies nicht machbar ist -
C++: |
//delete[] filename; filename=merr_name.str().c_str();
|
ersetzen durch
C++: |
delete[] filename; std::string tmp_filename = filename=merr_name.str(); filename = new char[tmp_filename.length()+1]; strcpy(filename, tmp_filename);
|
... Ich wäre Dir aber empfehlen filename in ein std::string zu wandeln, ist deutlich sauberer. -- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |