gpt4 book ai didi

C++ - va_list 坏指针

转载 作者:行者123 更新时间:2023-11-30 02:03:50 26 4
gpt4 key购买 nike

在 case 's' 下,我得到一个坏指针 (0xcccccccc) 异常:

string Logger::format(const char *str, va_list args)
{
ostringstream output;

for(int i = 0; i < strlen(str); ++i)
{
if(str[i] == '%' && str[i+1] != '%' && i+1 < strlen(str))
{
switch(str[i+1])
{
case 's':
{
char *temp = va_arg(args, char*);
output << temp;
break;
}
case 'i':
{
int temp = va_arg(args, int);
output << temp;
break;
}
case 'd':
{
double temp = va_arg(args, double);
output << temp;
break;
}
case 'f':
{
float temp = va_arg(args, float);
output << temp;
break;
}
default:
output << str[i];
}

i++;
}
else
{
output << str[i];
}
}

return output.str();
}

上面的函数是这样调用的:

void Logger::debugFormat(string message, ...)
{
const char* cstr = message.c_str();

va_list args;
va_start(args, cstr);

record(DEBUGGING, format(cstr, args));

va_end(args);
}

我在我所有的代码中都这样调用上面的代码

Logger::debugFormat("Loading Image %s", path.c_str());

任何其他类型(int、double、float)都可以正常工作。感谢您的帮助。

最佳答案

您没有正确使用 va_start。第二个参数应该是函数参数,参数变量列表(由 ... 表示)之后开始。也就是说,它应该是:

va_start(args, message);

关于C++ - va_list 坏指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370923/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com