我有一个奇怪的问题,我不知道它来自哪里。我将两个字符串从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模式,我会收到调试断言错误。
答案 0 :(得分:1)
可能字符串已经被破坏但恰好仍然包含有效数据,因为堆栈的那部分还没有被使用过。如果你需要保持字符串,请制作你自己的副本,你可以控制它们。