簡體   English   中英

va_list值始終為-52並使用字符串崩潰

[英]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.

我已經將代碼與其他示例進行了比較,並再次檢查了va_listvsprintf的引用,但我似乎無法發現錯誤。

除了初始化fragment_file_pathva_argsizeof在其實施和sizeof(sMsg)sizeof(string) ,以找出其中的一個參數堆棧,這是錯誤的開始,因為sMsg是一個字符串的引用 ,而不是一個串。

您不能將引用用作varargs的最后一個命名參數; 使用值或指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM