我有这个简单的功能:

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()分配的内存中,然后调用方必须删除/释放该内存。

10-07 21:03