在调试模式下运行时缓冲区溢出

Buffer overrun when running in debug mode

本文关键字:缓冲区 溢出 运行时 调试 模式      更新时间:2023-10-16

当在调试模式下运行我们的游戏时,我得到一个缓冲区溢出崩溃-调用堆栈是香蕉(看起来像它被困在递归循环中),但是我跟踪崩溃到以下函数:

std::wstring formatWstring(const wchar_t *first, ...)
{
    wchar_t str[4096];
    va_list marker;
    va_start(marker, first);
    vswprintf_s(str, sizeof(str), first, marker);
    va_end(marker);
    return str;
}

按如下方式调用:

std::wstring gmh = io::lexicon->getString("FE_gamemode_header");
std::wstring gms = io::lexicon->getString(formatString("FE_gamemode_%s", game->getCurrentMapGameMode().c_str()));
m_gameMode = formatWstring(L"%S: %S", gmh.c_str(), gms.c_str());

我似乎不知道是什么把它炸了。有线索吗?

尝试将调用更改为

vswprintf_s(str, sizeof(str)/sizeof(wchar_t), first, marker);

你的手术尺寸不对。wchar_t不能保证char的大小为1