变参导致的故障
公共接口:
void problemInfoReport(const char *format, ...)
业务调用:
void serviceFailReport(char *info)
{
...
printf("error info : %s", info);
problemInfoReport(info);//导致重启
...
}
故障代码把字符串info直接赋值给了format,因为info携带了异常字符"%",导致problemInfoReport函数当作格式化字符串处理,但后面又没有入参,导致内存访问越界。
解决方法:
使用字符串作为变参时需要注意,problemInfoReport("%s", info);