我很难在x64中编译程序。
虽然我可以修复所有内容并进行编译,但程序在日志记录时崩溃:

void TLog::VLogAddFormat(COLORREF colorText, const char *& AddressOfFmt, ...)
{
    m_Sync.Lock();
    // ----
    PrepareLogBuff();
    // ----
    //setter(&AddressOfFmt, -32L);
    va_start(m_pArguments, AddressOfFmt);       // the real address of fmt. m_pArguments = (va_list)_ADDRESSOF(v) + _INTSIZEOF(v)
    vsprintf(m_LogTempBuff, AddressOfFmt, m_pArguments);
    va_end(m_pArguments); < BREAK HERE !
    // ----
    LogAddStr(colorText, m_LogTempBuff);
    // ----
    m_Sync.Unlock();
}


请注意,我添加了“ ...”,因为否则将无法编译。
中断发生在:“ va_end(m_pArguments); 而且奇怪的问题是,在“ m_pArguments”中,我得到了非常奇怪的字符...

有人可以告诉我如何在x64中使用va_start吗?非常感谢。

最佳答案

您不能将引用参数传递给va_start。这是不确定的行为。

关于c++ - va_start在x64体系结构上出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33539636/

10-13 05:44