2013-01-22 67 views
0

當以調試模式運行我們的遊戲時,我得到一個緩衝區溢出崩潰 - callstack是香蕉(看起來像卡在一個遞歸循環中),但是我跟蹤崩潰到以下函數:以調試模式運行時緩衝區溢出

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()); 

我似乎無法弄清是怎麼吹這件事..任何線索?

+3

'sizeof(str)'應該是'sizeof(str)/ sizeof(wchar_t)'。 –

+0

@LuchianGrigore這應該是答案。 –

+0

@AlexeyFrunze IDK,如果這是真正的問題。 –

回答

2

嘗試改變調用

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

你在錯誤的大小操作。 wchar_t沒有char保證爲1號。

+0

啊,非常感謝! – happytrooper