我很难在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/