c - 我在 C++ 中使用 widestring 时程序崩溃

标签 c memory lua widestring

(因为我还没有足够的声望来回答我自己的问题,所以我先把它放在这里。我发布它的时候没有想清楚。对我来说是凌晨 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 中打开 Debug模式时它工作正常,但显然这不是一个好的解决方案,我在 Windows 中所以我也不能使用 Valgrind,有什么建议吗?

提前致谢

最佳答案

终于找到了 所以这是由另一个问题引起的。 我正在使用 lua 动态地将一个对象添加到屏幕,该对象转到一个单独的列表,所以当我访问这些单独列表中的元素时,某些东西可能会覆盖某处,并且问题只会在稍后尝试显示文本时出现.

所以是的,总有一些其他的可能性,哈哈

永远不要相信你在凌晨 3 点所做的工作

关于c - 我在 C++ 中使用 widestring 时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11257558/

相关文章:

c - 需要帮助循环魔数(Magic Number)程序

c - Ubuntu 16.04 - malloc 实现。指向下一个 block 的指针在哪里?

c - malloc() 和 calloc() 是否正确?

indexing - 我可以强制 Lua 的表索引从零开始吗?

C 指针在传递给函数后未设置

C String 打印垃圾字符

java - 在初始化时使用尽可能少的内存在枚举常量中存储对任意类的引用的最佳方法是什么?

c - 为什么在 BSS 和数据段中将不同大小的内存分配给整数?

c++ - 使用tolua++时如何让lua获得返回值的所有权?

date - os.time() Lua 生成的错误处理表