【发布时间】:2013-01-05 13:11:17
【问题描述】:
在调试模式下运行我们的游戏时,我遇到缓冲区溢出崩溃 - 调用堆栈是香蕉(看起来它卡在递归循环中)但是我将崩溃跟踪到以下函数:
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());
我似乎无法弄清楚这到底是怎么回事……有什么线索吗?
【问题讨论】:
-
sizeof(str)应该是sizeof(str)/sizeof(wchar_t)。 -
@LuchianGrigore 这应该是答案。
-
@AlexeyFrunze IDK 如果这是实际问题。
-
致 OP:不要忽视阅读您正在使用的功能的说明。
-
@LuchianGrigore 这肯定会导致缓冲区溢出。
标签: c++ visual-studio-2008 variadic-functions widechar printf