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 : %sn", fragment_file_path);
然后程序崩溃并给出这个
Unhandled exception at 0x560616B3 (msvcr110d.dll) in Fabian.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
我已经将代码与其他示例进行了比较,并再次检查了va_list和vsprintf的引用,但我似乎没有发现任何错误。
除了初始化fragment_file_path
,va_arg
在其实现中执行sizeof
,sizeof(sMsg)
将是sizeof(string)
,以确定堆栈上下一个参数的起始位置,这是错误的,因为sMsg
是对字符串的引用,而不是字符串。
不能将引用用作varargs的最后一个命名参数;使用值或指针。
相关文章:
- 为什么我的结构在包含字符串时崩溃?
- 当 getline 用于获取整个字符串时,程序崩溃
- 删除动态字符串时程序崩溃
- 当 JSON 值应为 INT 但以字符串类型发送时,RapidJSON 崩溃
- 从数组比较2个字符串时,程序崩溃
- C 通过char读取文件字符串的文件char;崩溃
- 使用字符串而不是字符数组时程序崩溃
- 返回向量<对<字符串,字符串>>会导致 gcc 编译代码 (curlcpp) 崩溃
- 矢量尝试添加字符串时会崩溃
- 从CSV文件读取时,试图将值插入一个字符串中时崩溃
- 清理所拥有的(!)字符串成员时,析构函数偶尔崩溃
- 程序使用SCANF读取字符串时会崩溃
- 在执行字符串时更改字符会使程序崩溃
- 程序在输入 10 个字符串后崩溃
- o字符串流对象创建导致我的程序崩溃
- p = new String [0]和p = new Int [0]之后,为什么当删除[] p时字符串版本崩溃
- C++:使用 LSD 基数排序字符串排序崩溃
- jvm在尝试将TCHAR类型发送到接受字符串作为参数的java函数时崩溃
- Google protobuf在解析字符串数据时在Android中崩溃
- 崩溃:字符串问题