我有这个简单的功能:
const wchar_t *StringManager::GetWCharTStar(int stringId)
{
std::wstring originalString = StringManager::GetString(stringId);
const wchar_t *retStr = originalString.c_str();
return retStr;
}
在该函数的第二行,我有正确的wchar_t *。但是,当我返回时,数据将切换为垃圾数据。两者之间没有功能。是什么赋予了?!
最佳答案
originalString是在堆栈上分配的。 .c_str()方法仅返回一个指向wstring对象连续内存的指针。当函数返回时,originalString超出范围并被破坏,因此您返回的指针值指向已删除的内存。
如果需要执行此操作,则应将数据的拷贝复制到使用new或malloc()分配的内存中,然后调用方必须删除/释放该内存。