调用map :: count后销毁的函数参数

时间:2016-01-02 23:22:40

标签: c++ string lua

我有一个奇怪的问题,我不知道它来自哪里。我将两个字符串从lua传递回c ++。第一个字符串是一个文件名,由于这是DirectX对内置纹理加载函数的要求,因此必须将其转换为wchar_t *。第二个字符串保持不变(是普通的char *)。我使用断点并发现在运行“TextureList.count(filepath)”之后,传递给函数的2个字符串似乎被破坏并变成随机垃圾。通常这个函数可以正常工作,如果我在自己键入字符串,但对于我的脚本引擎,我需要能够使用lua外部加载纹理。

short ID = lua_tonumber(env, 1);
string Texture = lua_tostring(env, 2);
const char* Archive = lua_tostring(env, 3);

wstring_convert<codecvt_utf8_utf16<wchar_t>> convert;

wstring final_ = convert.from_bytes(Texture);

for (auto& Sprites : StageBackground->BackgroundSprites)
{
    if (Sprites->Object_ID == ID)
    {
        LoadTextureFromMemory(final_.c_str(),Archive, Sprites->Texture);
        break;
    }
}

这是从lua调用以加载纹理的函数。

编辑:我注意到问题可以缩小到“归档”变量,即被销毁的变量。我仍然无法找出原因。如果我在Visual Studio中从Release模式切换到Debug模式,我会收到调试断言错误。

1 个答案:

答案 0 :(得分:1)

可能字符串已经被破坏但恰好仍然包含有效数据,因为堆栈的那部分还没有被使用过。如果你需要保持字符串,请制作你自己的副本,你可以控制它们。