使用宽字符串时,程序立即崩溃。
2012-6-29 10:34:14
收藏:0
阅读:158
评论:1
由于我还没有足够的声望来回答我的问题,所以我首先要把它放在这里。当我发布它时,我没有想清楚。对我来说是凌晨3点,我没有想到在其他地方寻找问题。
我正在创建另一个函数,用于动态添加一个具有其自己要显示的消息的对象。这就是给我问题的,所以一旦我静态加载它,它就很好。这确实是代码的另一部分的问题。)
我在这里有一个非常奇怪的问题
我已经编写了用于lua的C ++代码(没有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,请提供建议?
提前感谢
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
我终于找到了原因, 这是由于另一个问题引起的。 我正在使用 Lua 对屏幕动态添加一个对象,这个对象会进入一个单独的列表中,当我访问这些单独的列表中的元素时,可能会发生覆盖,问题只会在稍后尝试显示文本时出现。
所以,是的,总会有其他可能性,哈哈
而且不要相信你在凌晨 3 点做的工作 o.o