.c_str()奇怪吗?数据变化没有押韵或原因?

3 c++ string wchar-t wstring c-str

我有这个简单的功能:

const wchar_t *StringManager::GetWCharTStar(int stringId)
{
    std::wstring originalString = StringManager::GetString(stringId);
    const wchar_t *retStr = originalString.c_str();
    return retStr;
}
Run Code Online (Sandbox Code Playgroud)

在该函数的第二行,我有正确的wchar_t*.但是,当我返回时,数据切换到垃圾数据.两者之间没有任何功能.是什么赋予了?!

i_a*_*orf 11

originalString在堆栈上分配..c_str()方法只返回指向wstring对象的某个连续内部内存的指针.当函数返回时,originalString超出范围并被销毁,因此返回的指针值指向已删除的内存.

如果需要这样做,你应该将数据的副本复制到用new或malloc()分配的内存中,然后调用者必须删除/ free()该内存.

  • "你应该将数据的副本复制到用new或malloc()分配的内存中".好吧,你*应该*按值返回一个wstring,并更改调用者以使用它.如果ogres在夜间闯入并吃掉那些代码,并且如果你想再次这样做就威胁要吃掉你,那么也许你可以考虑动态分配;-) (3认同)

Nem*_*vic 5

您正在返回指向临时的指针.当originalString超出范围时,指针指向的数据将被删除.