У меня есть этот блок кода, как написано с strstream
, И я преобразовал это в sstream
как ниже. Я не уверен, но я думаю printStream->str()
возвращает строковый объект с копией (временной) содержимого в буфере потока, указанного printStream
и тогда вы вызываете c_str()
на нем и получить const char *
и затем отбрасывает константу, а затем возвращает указатель вне области действия функции. Я думаю, так как это временное значение, вы получаете от printStream->str()
, вы будете использовать указатель для освобождения памяти вне этой функции. Как мне это сделать?
char * FieldData::to_string() const
{
if(printStream)
return printStream->str();
FieldData* notConst = (FieldData*) this;
notConst->printStream = new std::ostrstream;
// check heap sr60315556
if (notConst->printStream == NULL)
return NULL;
*(notConst->printStream) << "Invalid Field Type";
*(notConst->printStream) << '\0';
return printStream->str();
}
char * FieldData::to_string() const
{
if(printStream)
return const_cast<char *>(printStream->str().c_str());
FieldData* notConst = (FieldData*) this;
notConst->printStream = new std::ostringstream;
// check heap sr60315556
if (notConst->printStream == NULL)
return NULL;
*(notConst->printStream) << "Invalid Field Type";
*(notConst->printStream) << '\0';
return const_cast<char *>(printStream->str().c_str());
}
Измените тип возврата на std::string
и вернуть std::string
объект напрямую.
Я думаю, что функция называется to_string
действительно очень, действительно должен вернуть std::string
,
И тогда весь этот мусор можно заменить
std::string FieldData::to_string() const
{ return "Invalid Field Type"; }