(由于我还没有足够的声望来回答我自己的问题,所以我先把它放在这里。我发布它时并没有想清楚。对我来说是凌晨 3 点,我没想到在别处寻找问题。
我正在制作另一个函数来在 lua 中动态添加一个对象,该对象有自己的消息要显示。这就是给我带来问题的那个,所以一旦我静态加载它就可以了。这确实是另一部分代码的问题。)
我在这里遇到了一个很奇怪的问题
我的 C++ 代码使用 lua(没有 boost 库),因此它可以从 lua 检索变量等,并且 lua 可以调用已注册的 C 函数。
现在我有两个版本的函数,一个用于 ANSI,另一个用于 Unicode(中文)。ANSI 版本似乎工作正常,并且不会中断。问题出在 unicode 版本上。
我设法解密了 ANSI 格式的 unicode,所以这一切都很好。现在的问题是它可以正常工作几次,但是当我多次重复相同的 lua 代码时,程序会崩溃。我仍然无法判断这是 lua 堆栈的问题还是只是内存的问题。
这是代码首先给出代码,这就是我将其缩小到的范围
int l_showMSG(lua_State *l)
{
printf("showMSG::begin\n");
SDL_SemWait(msgLock);
char* fontname = (char*) lua_tostring(mainL,-1); lua_pop(mainL,1);
wchar_t* txt = (wchar_t *) lua_tostring(mainL,-1);
wstring msg = wstring(txt); //this is the code that breaks
lua_pop(mainL,1);
SDL_SemPost(msgLock);
printf("showMSG::done\n"); //it seens to get here or break in the line above depending on what I uncomment in my actual code o.o
return 0;
}
所以经过几个小时的 printf 和测试,我发现 wstring msg = wstring(txt) 是打破它的行。
我通过使用widestringstream解决了这个问题,至少在这里不会崩溃(尽管我仍然必须修复其他函数才能使用widestringstream才能工作,可能)
但是,一旦我添加了类似 wstring msg = buf.str() //buf 作为流的行,就会出现同样的问题。
所以我想知道,发生这种情况的原因可能是什么?当我在 Code::Blocks 中打开调试模式时它工作正常,但显然这不是一个好的解决方案,我在 Windows 中,所以我也不能使用 Valgrind,有什么建议吗?
提前致谢