尝试使用带有参数变量的函数时出现 C++ 内存冲突错误
C++ Memory violation error when trying to use function with variable of arguments
我想创建一个函数,将信息记录到文件中。这个函数需要获取一些参数并且应该迭代它们并将它们打印到控制台。我有以下代码:
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
s:
argval = va_arg(arguments, std::string);
并且您尝试使用 int
和 const char[]
类型的参数调用该函数。此外,您似乎对如何处理参数数量有误解。
大多数时候,可变参数函数模板是可变参数函数的更好选择:
#include <iostream>
template <typename ...T>
void log(const T& ... args)
{
(std::cout << ... << args) << '\n';
}
我想创建一个函数,将信息记录到文件中。这个函数需要获取一些参数并且应该迭代它们并将它们打印到控制台。我有以下代码:
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
s:
argval = va_arg(arguments, std::string);
并且您尝试使用 int
和 const char[]
类型的参数调用该函数。此外,您似乎对如何处理参数数量有误解。
大多数时候,可变参数函数模板是可变参数函数的更好选择:
#include <iostream>
template <typename ...T>
void log(const T& ... args)
{
(std::cout << ... << args) << '\n';
}