[英]va_list value is always -52 and crashes using strings
我正在嘗試使用多個參數,但它不起作用。 這是問題所在的代碼,它接受參數。
void CLog::Write(char lvl, char id, const std::string& sMsg, ...)
{
FASSERT(m_pLogger != nullptr);
va_list args;
va_start(args, sMsg);
char szBuf[1024];
vsprintf(szBuf, sMsg.c_str(), args);
va_end(args);
m_pLogger->Write(lvl, id, szBuf);
}
我打電話時使用此代碼
CLog::Write(FLOG_LVL_INFO, FLOG_ID_APP, "Vertices: %u", m_vertices.size() );
這個輸出
2013-11-30 - 15:02:45 - INFO - Vertices: 3435973836
當我嘗試傳遞更多這樣的字符串時
const char * fragment_file_path = "My shader path"; // some path to shader
CLog::Write(FLOG_LVL_INFO, FLOG_ID_APP, "Compiling shader : %s\n", fragment_file_path);
然后程序崩潰並給出了這個
Unhandled exception at 0x560616B3 (msvcr110d.dll) in Fabian.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
除了初始化fragment_file_path
, va_arg
做sizeof
在其實施和sizeof(sMsg)
會sizeof(string)
,以找出其中的一個參數堆棧,這是錯誤的開始,因為sMsg
是一個字符串的引用 ,而不是一個串。
您不能將引用用作varargs的最后一個命名參數; 使用值或指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.