如何解决尝试将函数与参数变量一起使用时发生C ++内存冲突错误
我想创建一个函数,该函数会将信息记录到文件中。此函数需要获取一些参数,并应对其进行迭代并将其打印到控制台。我有以下代码:
void log(int argnum ...)
{
va_list arguments;
std::string argval;
va_start(arguments,argnum);
for (int i = 0; i < argnum; i++) {
argval = va_arg(arguments,std::string);
std::cout << argval;
}
va_end(arguments);
}
log(10,"somebody","once","told","me","the","world","is","gonna","roll","me");
Visual Studio打开“ memcpy.asm”,并且出现访问冲突错误。知道有什么问题吗?
解决方法
坦率地说,您的代码有点混乱。您声明log
接受类型为int
的参数:
void log(int argnum ...)
然后,您尝试以std::string
的身份获得它们:
argval = va_arg(arguments,std::string);
然后尝试使用类型为int
和const char[]
的参数调用该函数。而且,您似乎对如何处理参数数量有误解。
在大多数情况下,可变参数函数模板是vararg函数的更好选择:
#include <iostream>
template <typename ...T>
void log(const T& ... args)
{
(std::cout << ... << args) << '\n';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。