我有這樣的代碼塊,寫成strstream
。我將它轉換爲sstream
如下。我不確定,但我認爲printStream->str()
正在返回一個字符串對象,其中包含printStream
所指向的流緩衝區中的內容的副本(臨時),然後您將調用c_str()
並獲取const char *
,然後投射該常量,然後將該指針返回到函數作用域之外。我認爲,因爲您從printStream->str()
得到的臨時值,您將使用一個指針來釋放此函數之外的內存。我應該怎麼做?將strstream轉換爲關於c_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());
}
不要使用'new',不使用C-風格的轉換,不要使用'const_cast' *特別*修改變量,不要使用C風格的字符串,不要返回指向已經釋放的內存的指針。事實上,我相當確定,如果重新開始比修復此代碼更容易。例如 – milleniumbug
我應該如何更改我的代碼?返回const_cast(printStream-> str()。c_str()); –